这两个函数都是对图像进行缩放
函数说明
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