在做项目过程中,遇到要对图片进行缩放(放大再缩小)。假如播放视频,要在放大的基础上连续播放。
缩放需要用到一个opencv中的resize()函数,学习一下resize函数。
resize()函数
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
InputArray src;输入的原始图片
OutputArray dst; 输出的目标图片
Size dsize();表示输出图像的大小。如果为0,则dsize=Size(round(fx∗src.cols),round(fy∗src.rows))
可见:fx,fy喝dsize不能同时为0.
fx,fy: 分别是图像的沿着x,y,轴的缩放系数,如果fx,fy等于0,
fx=(double)dsize.width/src.cols
fy=(double)dsize.height/src.rows
代码如下:
size等于0,fx,fy缩放系数等于2,即放大两倍。
cv::resize(src, dst, cv::Size(0,0), 2, 2, cv::INTER_LINEAR);
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char* argv[]) {
std::string path = "C:\\Users\\Administrator\\Desktop\\funny pic\\1.jpg";
cv::Mat src = cv::imread(path);
int resize_height = src.rows;
int resize_width =src.cols;
cout << "宽:" << resize_width << "高:" << resize_height << endl;
imshow("src", src);
Mat dst;
cv::resize(src, dst, cv::Size(0,0), 2, 2, cv::INTER_LINEAR);
imshow("dst", dst);
cv::waitKey(0);
return 0;
}
size等于resize_width /2, resize_height/2,而fx,fy等于0.
cv::resize(src, dst, cv::Size(resize_width /2, resize_height/2), 0, 0, cv::INTER_LINEAR);
代码:
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char* argv[]) {
std::string path = "C:\\Users\\Administrator\\Desktop\\funny pic\\1.jpg";
cv::Mat src = cv::imread(path);
int resize_height = src.rows;
int resize_width =src.cols;
cout << "宽:" << resize_width << "高:" << resize_height << endl;
imshow("src", src);
Mat dst;
cv::resize(src, dst, cv::Size(resize_width /2, resize_height/2), 0, 0, cv::INTER_LINEAR);
imshow("dst", dst);
cv::waitKey(0);
return 0;
}
来源:CSDN
作者:Mr_AndyWJ
链接:https://blog.csdn.net/weixin_43916755/article/details/103591774