首页 > 代码库 > OpenCV 入门示例之五:一个复杂点的变换

OpenCV 入门示例之五:一个复杂点的变换

前言

  前文介绍了一个简单的变换。需要注意的是,很多时候,输出和输入图像的格式是不同的( 大小,深度,通道 )。在本文将展示的程序中,对图像进行了缩放( 使用cvPyrDown 函数 ),这种情况下需要先定制好输出图像的格式,然后再将其与输入图像一起传递进缩放函数

代码示例

 1 // 此头文件包含图像IO函数的声明
 2 #include "highgui.h"
 3  // 此头文件包含基本的图像处理函数和高级计算机视觉算法
 4 #include "cv.h"
 5 
 6 int main (void) {
 7     
 8     // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
 9     IplImage * img = cvLoadImage ("D:\\1.jpg");
10 
11     // 创建一个窗口显示缩放前的图像
12     cvNamedWindow ("缩放前", CV_WINDOW_AUTOSIZE);
13 
14     // 将图像装载进窗口并显示此窗口
15     cvShowImage ("缩放前", img);
16 
17     // 定制一个新的图像内存块,以存放缩放结果。
18     IplImage * out = cvCreateImage (
19         cvSize (img->width/2, img->height/2),    // 大小为原图的一半
20         img->depth,    // 深度相同
21         img->nChannels    // 通道数相同
22     );
23 
24     // 该函数实现对图像的缩放功能
25     cvPyrDown (
26         img,    // 原图像 
27         out        // 缩放后的图像( 一定要先创建好了才进入函数 )
28     );
29 
30     // 创建一个窗口显示缩放后的图像
31     cvNamedWindow ("缩放后", CV_WINDOW_AUTOSIZE);
32 
33     // 将图像装载进窗口并显示此窗口
34     cvShowImage ("缩放后", out);
35 
36     // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
37     // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
38     cvWaitKey (0);
39 
40     // 释放图像内存块
41     cvReleaseImage (&img);
42     cvReleaseImage (&out);
43 
44     // 关闭窗口同时释放窗口内存块
45     cvDestroyWindow ("缩放前");
46     cvDestroyWindow ("缩放后");
47 
48     return 0;
49 }

运行测试

  1. 将如下测试图片另存到 D 盘,命名为 "1.jpg":

  

  2. 运行结果: