图像的缩放在图像处理中比较常见,在opencv中图像缩放函数是resize函数,该函数可以采用最邻近插值点法、双线性插值法、邻域像素再取样插补、立方插补四种插值算法对图像进行插值,下面我们将介绍resize函数的各个参数功能以及使用
resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)
参数功能:
src:输入图
dst:输出图,形态和输入图相同,当dsize不等于0,输出图尺寸会和dsize相同,当dsize等于0,输出图尺寸会由输入图尺寸、fx、fy计算而得
dsize:输出尺寸,当输入为0时,fx、fy皆不可为0,dsize = Size(round(fxsrc.cols),round(fysrc.rows))
fx:水平缩放比例,当输入为0时,fx=(double)dsize.width/src.cols
fy:垂直缩放比例,当输入为0时,fy=(double)dsize.height/src.rows
interpolation:内插方式 内插方式有
1). CV_INTER_NEAREST 最邻近插值点法
2). CV_INTER_LINEAR 双线性插值法
3).CV_INTER_AREA 邻域像素再取样插补
4).CV_INTER_CUBIC 双立方插补,4*4大小的补点
实现代码:
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
//图片的缩小与放大
int main()
{
Mat img = imread("dog.jpg");
imshow("原始图", img);
Mat dst1,dst2;
resize(img, dst1, Size(0,0),1.5,1.5,CV_INTER_LINEAR);//等同于resize(img, dst, Size(img.cols*1.5,img.rows*1.5),0,0,CV_INTER_LINEAR);
imshow("放大原图的1.5倍", dst1);
resize(img, dst2, Size(0, 0), 0.5, 0.5, CV_INTER_LINEAR);//等同于resize(img, dst, Size(img.cols*0.5,img.rows*0.5),0,0,CV_INTER_LINEAR);
imshow("缩小为原图的0.5倍", dst2);
waitKey();
}
实现结果:
图像缩放是一个比较简单的算法,根据自己需求基于resize函数选择正确的插值方法,如果对该函数有任何问题欢迎留言讨论。
可以微信搜索“图像处理CV讲武堂”关注,也可如下二维扫码关注。