resize函數


#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
Mat srcImage1 = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\06.jpg"), dstImage1;//打開原圖,創建修改后的目標圖存放的矩陣
Mat srcImage2 = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\07.jpg");//需要匹配的另一張圖片
imshow("未矯正過的圖像", srcImage1);//顯示未修改的圖片
imshow("矯正圖像模板", srcImage2);//顯示矯正圖像模板
resize(srcImage1, dstImage1, srcImage2.size(), 0, 0);

//Size(),就是第二張圖片的大小了,因為已經匹配了另外一張圖片的大小,所以x和y方向的縮放比例就是0了。
imshow("矯正后的圖像", dstImage1);
waitKey(0);
return 0;
}

 

在處理圖片時,常常需要時得修改圖片的比例或者匹配另外一張圖片的大小,那就可以使用resize(),重新修改源圖片的大小或使得和另外一張圖片尺寸相同。

首先看看resize()的參數

void resize( InputArray src, OutputArray dst,Size dsize, double fx = 0, double fy = 0,int interpolation = INTER_LINEAR );

src :source image.//原圖。

dst: destination image//目標圖片

dsize:dstination size//目標圖片的大小

fx:(原文用的是''decimate'':抽取)修正x方向上的比例。

fy:修正y方向上的比例。

interpolation:插值方法,如果原圖變大,就可以使用。是一個枚舉變量,為1、2、3...,代表了不同的插值方法。

圖像縮放之后,肯定像素要進行重新計算的,就靠這個參數來指定重新計算像素的方式,有以下幾種:

INTER_NEAREST - 最鄰近插值
INTER_LINEAR - 雙線性插值,如果最后一個參數你不指定,默認使用這種方法
INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
INTER_CUBIC - 4x4像素鄰域內的雙立方插值
INTER_LANCZOS4 - 8x8像素鄰域內的Lanczos插值

使用注意事項:

     1. dsize和fx/fy不能同時為0,要么你就指定好dsize的值,讓fx和fy空置直接使用默認值,就像

                         resize(img, imgDst, Size(30,30));

         要么你就讓dsize為0,指定好fx和fy的值,比如fx=fy=0.5,那么就相當於把原圖兩個方向縮小一倍!

     2 至於最后的插值方法,正常情況下使用默認的雙線性插值就夠用了。

                        幾種常用方法的效率是:最鄰近插值>雙線性插值>雙立方插值>Lanczos插值;

                        但是效率和效果成反比,所以根據自己的情況酌情使用。

     3. 正常情況下,在使用之前dst圖像的大小和類型都是不知道的,類型從src圖像繼承而來,大小也是從原圖像根據參數計算出來。但是如果你事先已經指定好dst圖像的大小,那么你可以通過下面這種方式來調用函數:

                        resize(src, dst, dst.size(), 0, 0, interpolation);

#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\06.jpg");//打開原圖
	Mat dstImage;                  //目標圖
	imshow("未矯正過的圖像", srcImage);//顯示未矯正的原圖
	resize(srcImage, dstImage, Size(), 0.5, 0.5);//由於指定縮放的比例,Size()直接給,后面就分別是x、y方向的縮放比例
	imshow("矯正后的圖像", dstImage);
	waitKey(0);
	return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM