OpenCV的resize函数

这两个函数都是对图像进行缩放
函数说明
void cv::resize ( InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)
前面三个变量无需说明,
fx scale factor along the horizontal axis; 当它为0时,当作没有就醒了,函数会按照dsize的宽度和高度进行重塑,fy类似

使用方法
rc缩小为原来的0.2倍的方法有两种;
第一种

cv::resize(img,ResImg,Size(),0.2,0.2);

和相对麻烦一点的第二种

Size ResImgSize=Size(img.cols*scale,img.rows*scale);
cv::resize(img,ResImg,ResImgSize,0,0);

需要注意的是当第三个变量dsize不为空的时候,fx,fy被忽略不用

例程

#include<iostream>
//opencv基础
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
//for reSize()
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;

//缩放倍数为0.5
double scale = 0.5;
int main()
{
	cv::Mat img=cv::imread("/data/girl.jpg");
	if(!img.data)
	{
		cout<<"文件读取失败,请确认文件路径及文件名"<<endl;
		return -1;
	}
	
	cvNamedWindow("原始图像",CV_WINDOW_AUTOSIZE);
	imshow("原始图像",img);
	cout<<"原始图像的行为: "<<img.rows<<"\t原始图像的列为: "<<img.cols<<endl;

	Size ResImgSize=Size(img.cols*scale,img.rows*scale);
	cv::Mat ResImg(ResImgSize,img.type());
	cv::resize(img,ResImg,ResImgSize,0.2,0.2);

	cvNamedWindow("重塑图像",CV_WINDOW_AUTOSIZE);
	imshow("重塑图像",ResImg);
	cout<<"重塑图像的行为: "<<ResImg.rows<<"\t重塑图像的列为: "<<ResImg.cols<<endl;
	cv::waitKey();

}

主要参考https://docs.opencv.org/3.4/da/d54/group__imgproc__transform.html#ga47a974309e9102f5f08231edc7e7529d

猜你喜欢

转载自blog.csdn.net/qq_34122731/article/details/90576735