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;
}

原文地址:https://www.cnblogs.com/fcfc940503/p/11345361.html