opencv-图像缩放resize()

运行环境:


vs2013、opencv3.3、win10-64bit

OpenCV提供了resize()函数来改变图像的大小。

函数原型:


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

参数解释:


src:输入,原图像,即待改变大小的图像;

dst:输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;

dsize:输出图像的大小。如果这个参数不为0,那么就代表将原图像缩放到这个Size(width,height)指定的大小;如果这个参数 为0,那么原图像缩放之后的大小就要通过下面的公式来计算:

dsize = Size(round(fx*src.cols), round(fy*src.rows))

其中,fx和fy就是下面要说的两个参数,是图像width方向和height方向的缩放比例。

fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;

fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;

interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下5种:

  • INTER_NEAREST - 最邻近插值
  • INTER_LINEAR - 双线性插值(默认)
  • INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似
  • INTER_CUBIC - 4x4像素邻域内的双立方插值
  • INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值

示例代码:


#include
#include"opencv2/opencv.hpp"
#include"opencv2/highgui/highgui.hpp"

using namespace std;
using namespace cv;

int main()
{
	Mat srcImg = imread("E:\\Project\\opencvPicture\\lenna.jpg");//打开图像
	if (srcImg.empty())//判断是否正确打开图片
	{
		cout << "加载图像失败!" << endl;
		return -1;
	}
	imshow("原图", srcImg);//显示原图

	Mat dstImg;
	resize(srcImg, dstImg, Size(), 0.5, 0.5);//缩小为原来尺寸的0.5倍
	imshow("缩小图片", dstImg);

	waitKey(0);
	return 0;
}

运行结果:


opencv-图像缩放resize()_第1张图片

参考链接:


【1】OpenCV--图像的缩放-resize()

你可能感兴趣的:(opencv,opencv,图片缩放,resize)