码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCV官方文档学习记录(7)

时间:2014-12-06 01:24:56      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

从今天开始进入官方的图像处理部分。

 

图像滤波:

主要介绍了四种滤波函数的使用方式

示例代码:

 1 #include <opencv2\opencv.hpp>
 2 #include <iostream>
 3 #include <string>
 4 
 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
 6 
 7 int MAX_KERNEL_LENGTH = 31;
 8 
 9 using namespace std;
10 using namespace cv;
11 
12 void Show(std::string name,Mat img)
13 {
14     namedWindow(name, CV_WINDOW_AUTOSIZE);
15     imshow(name, img);
16 }
17 
18 int main(void)
19 {
20     Mat src = imread("lena.jpg");
21     if (src.empty())
22         return -1;
23     Show("Src", src);
24 
25     Mat dst = src.clone();
26     for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
27     {
28         blur(src, dst, Size(i, i), Point(-1, -1));
29     }
30     Show("Blur", dst);
31 
32     for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
33     {
34         GaussianBlur(src, dst, Size(i, i), 0, 0);
35     }
36     Show("GaussianBlur", dst);
37 
38     for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
39     {
40         medianBlur(src, dst, i);
41     }
42     Show("MedianBlur", dst);
43 
44     for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
45     {
46         bilateralFilter(src, dst, i, i * 2, i / 2);
47     }
48     Show("BilateralFilter", dst);
49 
50     waitKey();
51     return 0;
52 }

 

 

可以使用如下方式显示变换程度:

 

 1 #include <opencv2\opencv.hpp>
 2 #include <iostream>
 3 #include <string>
 4 
 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
 6 
 7 int MAX_KERNEL_LENGTH = 31;
 8 
 9 using namespace std;
10 using namespace cv;
11 
12 void Show(std::string name,Mat img)
13 {
14     namedWindow(name, CV_WINDOW_AUTOSIZE);
15     imshow(name, img);
16 }
17 
18 int main(void)
19 {
20     Mat src = imread("lena.jpg");
21     if (src.empty())
22         return -1;
23     Show("Src", src);
24 
25     Mat dst = src.clone();
26     for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
27     {
28         blur(src, dst, Size(i, i), Point(-1, -1));
29         Show("Blur", dst);
30         waitKey(100);
31     }
32 
33     waitKey();
34     return 0;
35 }

 

函数说明:

Box Filter:

blur(src, dst, Size(i, i), Point(-1, -1));

Size(i,i)是滤波器的kernel,Point(-1,-1)是滤波锚点位置,为负数时代表跟随滤波器的kernel(可以防止图像变换过程中偏移)。

 

Gaussian Filter:

GaussianBlur(src, dst, Size(i, i), 0, 0);

Size同样是kernel,后面两个参数是sigma x,y的值,若为0表示跟随kernel,(因为作为分母其不可为0)。

 

Median Filter:

medianBlur(src, dst, i);

参数i代表的是kernel值,因为是方形(二维)图像,所以只用一个数字就好,并且需要使用奇数。

 

Bilateral Filter:

bilateralFilter(src, dst, i, i * 2, i / 2);

后面三个参数分别表示:

d,变换需要使用的直径范围,就是每个像素点会根据周围几个像素点进行运算;

color,颜色域标准差;

space,坐标空间的标准差。

 

虽然网速不好,还是上传变换后的结果图片吧:

 bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

原图就自己去opencv的安装文件夹下找了。

 

以上。

OpenCV官方文档学习记录(7)

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/lhyz/p/4147725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!