您的位置:首页 > 运维架构

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

2014-12-06 00:59 567 查看
从今天开始进入官方的图像处理部分。

图像滤波:

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

示例代码:

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

int MAX_KERNEL_LENGTH = 31;

using namespace std;
using namespace cv;

void Show(std::string name,Mat img)
{
namedWindow(name, CV_WINDOW_AUTOSIZE);
imshow(name, img);
}

int main(void)
{
Mat src = imread("lena.jpg");
if (src.empty())
return -1;
Show("Src", src);

Mat dst = src.clone();
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
blur(src, dst, Size(i, i), Point(-1, -1));
}
Show("Blur", dst);

for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
GaussianBlur(src, dst, Size(i, i), 0, 0);
}
Show("GaussianBlur", dst);

for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
medianBlur(src, dst, i);
}
Show("MedianBlur", dst);

for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
bilateralFilter(src, dst, i, i * 2, i / 2);
}
Show("BilateralFilter", dst);

waitKey();
return 0;
}


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

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

int MAX_KERNEL_LENGTH = 31;

using namespace std;
using namespace cv;

void Show(std::string name,Mat img)
{
namedWindow(name, CV_WINDOW_AUTOSIZE);
imshow(name, img);
}

int main(void)
{
Mat src = imread("lena.jpg");
if (src.empty())
return -1;
Show("Src", src);

Mat dst = src.clone();
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
blur(src, dst, Size(i, i), Point(-1, -1));
Show("Blur", dst);
waitKey(100);
}

waitKey();
return 0;
}


函数说明:

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,坐标空间的标准差。

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









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

以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: