OpenCV4入门070:图像缩放

索引地址:系列教程索引地址

OpenCV提供两种缩放方法:

  • resize
  • pyrimd

resize

函数原型为:

1
2
3
4
5
6
7
void cv::resize(InputArray    src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)

参数为:

  • 输入图片
  • 输出图片
  • 输出图片大小
  • x方向缩放比例
  • y方向缩放比例
  • 插值方式

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//---------------------------------【头文件、命名空间包含部分】----------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;

//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main() {
//载入原始图
Mat srcImage = imread("circles.jpg"); //工程目录下应该有一张素材图
Mat tmpImage, dstImage1, dstImage2; //临时变量和目标图的定义
tmpImage = srcImage; //将原始图赋给临时变量

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

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

//显示效果图
imshow("small", dstImage1);
imshow("bigger", dstImage2);

waitKey(0);
return 0;
}

效果为

resize

图像金字塔

pyrimid

上图所示为图像金字塔,中间为原始图片,如果想要得到缩小版图片,需要对原始图片进行采样,丢弃一些像素点得到新图片。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//---------------------------------【头文件、命名空间包含部分】----------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;

//-----------------------------------【main( )函数】------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main() {
//载入原始图
Mat srcImage = imread("circles.jpg"); //工程目录下应该有一张素材图
Mat tmpImage, bigImage,smallImage; //临时变量和目标图的定义
tmpImage = srcImage; //将原始图赋给临时变量

//显示原始图
imshow("src", srcImage);
//进行向上取样操作
pyrUp(tmpImage, bigImage, Size(tmpImage.cols * 2, tmpImage.rows * 2));
//进行向下取样操作
pyrDown(tmpImage, smallImage, Size(tmpImage.cols / 2, tmpImage.rows / 2));
//显示效果图
imshow("bigger", bigImage);
//显示效果图
imshow("small", smallImage);

waitKey(0);

return 0;
}

效果为:

pyrimid