图像金字塔与图片尺寸缩放

Posted fpzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像金字塔与图片尺寸缩放相关的知识,希望对你有一定的参考价值。

  我们经常会将某种尺寸的图像转换为其他尺寸的图像,如果放大或者缩小图片的尺寸,笼统来说的话,可以使用OpenCV为我们提供的如下两种方式: 

<1>resize函数。这是最直接的方式,

<2>pyrUp( )、pyrDown( )函数。即图像金字塔相关的两个函数,对图像进行向上采样,向下采样的操作。 

pyrUp、pyrDown其实和专门用作放大缩小图像尺寸的resize在功能上差不多,披着图像金字塔的皮,说白了还是在对图像进行放大和缩小操作。另外需要指出的是,pyrUp、pyrDown在OpenCV的imgproc模块中的Image Filtering子模块里。而resize在imgproc 模块的Geometric Image Transformations子模块里。

综合案例:

 1 #include <opencv2/opencv.hpp>
 2 #include <opencv2/imgproc/imgproc.hpp>
 3 #include <opencv2/highgui/highgui.hpp>
 4 #define WINDOW_NAME "程序窗口"
 5 using namespace cv;
 6 using namespace std;
 7 Mat g_srcImage,g_dstImage,g_tmpImage;
 8 int main()
 9 {
10     printf("用 1 or w 进行 resize函数的图片放大
");
11     printf("用 2 or s 进行 resize函数的图片缩小
");
12     printf("用 3 or a 进行 pyrUp 函数的图片放大
");
13     printf("用 4 or d 进行pyrDown函数的图片缩小
");
14 
15     g_srcImage=imread("E:\\rice.jpg");//读取原图
16     if(!g_srcImage.data)
17     {
18         printf("error!
");
19         return false;
20     }
21     namedWindow(WINDOW_NAME,WINDOW_AUTOSIZE);
22     imshow(WINDOW_NAME,g_srcImage);//显示原图
23     g_tmpImage=g_srcImage;//初始化赋值
24     g_dstImage=g_tmpImage;//初始化赋值
25     int key=0;
26     while(1)
27     {
28     
29         key=waitKey(9);
30         switch(key)
31         {
32         case 27:
33             return 0;
34             break;
35         case q:
36             return 0;
37             break;
38         case a:
39             pyrUp(g_tmpImage,g_dstImage,Size(g_tmpImage.cols*2,g_tmpImage.rows*2));
40             printf("检测到A按下,开始进行pyrUp函数的图片缩放:原图尺寸*2 
 ");
41             break;
42         case w:
43             resize(g_tmpImage,g_dstImage,Size(g_tmpImage.cols*2,g_tmpImage.rows*2));
44             printf("检测到W按下,开始进行resize函数的图片缩放:原图尺寸*2 
 ");
45             break;
46         case 1:
47             resize(g_tmpImage,g_dstImage,Size(g_tmpImage.cols*2,g_tmpImage.rows*2));
48             printf("检测到1按下,开始进行resize函数的图片缩放:原图尺寸*2 
 ");
49             break;
50         case 3:
51             pyrUp(g_tmpImage,g_dstImage,Size(g_tmpImage.cols*2,g_tmpImage.rows*2));
52             printf("检测到3按下,开始进行pyrUp函数的图片缩放:原图尺寸*2 
 ");
53             break;
54         case d:
55             pyrDown(g_tmpImage,g_dstImage,Size(g_tmpImage.cols/2,g_tmpImage.rows/2));
56             printf("检测到D按下,开始进行pyrDown函数的图片缩放:原图尺寸/2 
 ");
57             break;
58         case s:
59             resize(g_tmpImage,g_dstImage,Size(g_tmpImage.cols/2,g_tmpImage.rows/2));
60             printf("检测到S按下,开始进行resize函数的图片缩放:原图尺寸/2  
");
61             break;
62         case 2:
63             resize(g_tmpImage,g_dstImage,Size(g_tmpImage.cols/2,g_tmpImage.rows/2),(0,0),(0,0),2);
64             printf("检测到2按下,开始进行resize函数的图片缩放:原图尺寸/2 
 ");
65             break;
66         case 4:
67             pyrDown(g_tmpImage,g_dstImage,Size(g_tmpImage.cols/2,g_tmpImage.rows/2));
68             printf("检测到4按下,开始进行pyrdown函数的图片缩放:原图尺寸/2  
");
69             break;
70         }
71         imshow(WINDOW_NAME,g_dstImage);
72         g_tmpImage=g_dstImage;
73             
74     }
75     waitKey(0);
76     return 0;
77 
78 }

运行结果:

技术分享图片

技术分享图片

按下1或者w的效果:

技术分享图片

按下4或者d的效果:

技术分享图片

 

以上是关于图像金字塔与图片尺寸缩放的主要内容,如果未能解决你的问题,请参考以下文章

12高斯金字塔拉普拉斯金字塔与图片尺寸缩放

[转]OpenCV图像金字塔:高斯金字塔拉普拉斯金字塔与图片尺寸缩放

OpenCV入门教程之十三OpenCV图像金字塔:高斯金字塔拉普拉斯金字塔与图片尺寸缩放

OpenCV——图像金字塔和图片尺寸缩放

OpenCV探索之路:图片缩放和图像金字塔

OpenCV 图片尺寸缩放——resize函数