OpenCV 图片尺寸缩放——resize函数

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 图片尺寸缩放——resize函数相关的知识,希望对你有一定的参考价值。

OpenCV中的缩放:

如果要放大或缩小图片的尺寸,可以使用OpenCV提供的两种方法:

  1. resize函数,是最直接的方式;
  2. pyrUp,pyrDown函数,即图像金字塔相关的两个函数,对图像进行上采样和下采样的操作。关于上采样和下采样可以参考我的另一篇文章
    https://blog.csdn.net/weixin_45525272/article/details/121446923

resize函数

函数原型:

void cv::resize( 
	InputArray _src, 
	OutputArray _dst, 
	Size dsize,
	double inv_scale_x = 0,
	double inv_scale_y = 0, 
	int interpolation = INTER_LINEAR 
)

参数说明:

  • src,输入图像,Mat类型即可;

  • dst,输出图像,当其非零时,有着dsize(第三个参数)的尺寸或者有src.size()计算出来;

  • dsize,输出图像的大小。如果它等于0,由下式计算:

     dsize = Size( round(fx*src.cols, round(fy*src.rows)));
    其中fx,fy,dsize都能不为0
    
  • fx,沿水平轴的缩放系数,默认值为0,且等于0时,由下式计算:

     inv_scale_x = (double)dsize.width/ssize.width;
    
  • fy,沿垂直轴的缩放系数,默认值为0,且等于0时,由下式计算:

     inv_scale_y = (double)dsize.height/ssize.height;
    
  • interpolation,用于指定插值方式,默认值为INTER_LINEAR(线性插值),可选插值方式如下:

取值说明
INTER_NEAREST最近邻插值
INTER_LINEAR线性插值(默认值)
INTER_AREA区域插值(利用像素区域关系的重采样插值)
INTER_CUBIC三次样条插值(超过4×4像素领域内的双三次插值)
INTER_LANCZOS4Lanczos插值(超过8×8像素邻域的Lanczos插值)

注意:要缩小图像,一般情况下用INTER_AREA来插值;而若要放大图像,一般情况下用INTER_CUBIC(效率不高,不推荐)或INTER_LINEAR(效率高,推荐)

代码案例

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  

using namespace cv;
using namespace std;

int main() 
	// 载入原图
	Mat srcImage = imread("./test2.jpg");
	Mat temImage, dstImage1, dstImage2, dstImage3, dstImage4;	// 临时变量和目标图的定义
	temImage = srcImage;

	// 显示原图
	imshow("【原始图】", srcImage);

	//进行尺寸调整操作
	resize(temImage, dstImage1, Size(temImage.cols / 2, temImage.rows / 2), (0, 0), (0, 0), 3);
	resize(dstImage1, dstImage2, Size(dstImage1.cols / 2, dstImage1.rows / 2), (0, 0)(0, 0), 3);
	resize(srcImage, dstImage3, Size(srcImage.cols * 2, srcImage.rows * 2), (0, 0)(0, 0), 1);
	resize(dstImage3, dstImage4, Size(dstImage3.cols * 2, dstImage3.rows * 2), (0, 0)(0, 0), 1);

	// 显示效果图
	imshow("【效果图一:原图缩小两倍】", dstImage1);
	imshow("【效果图二:效果一缩小两倍】", dstImage2);
	imshow("【效果图三:原图放大两倍】", dstImage3);
	imshow("【效果图四:效果三放大两倍】", dstImage4);

	waitKey(0);
	return 0;

以上是关于OpenCV 图片尺寸缩放——resize函数的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV探索之路:图片缩放和图像金字塔

图像金字塔与图片尺寸缩放

12高斯金字塔拉普拉斯金字塔与图片尺寸缩放

图像金字塔与图片尺寸缩放

图片处理-opencv-3.图像缩放、旋转、翻转、平移

图像的尺寸调整