我是靠谱客的博主 怕黑巨人,最近开发中收集的这篇文章主要介绍OpenCV探索之路(三):滤波操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

滤波处理分为两大类:线性滤波和非线性滤波。OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法。

线性滤波:方框滤波、均值滤波、高斯滤波

方框滤波

#include<opencv2opencv.hpp>
#include<opencv2highguihighgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("lol4.jpg");
imshow("原始图", img);
Mat out;
boxFilter(img, out, -1, Size(5, 5));//-1指原图深度
imshow("方框滤波", out);
waitKey(0);
}

1093303-20170518142647010-2097168368.png

均值滤波
均值滤波就是方框滤波的一个特殊情况。
均值滤波的缺点就是不能很好地保护细节,在图像去燥的同时也破坏了图像的而细节部分,从而使图像变得模糊,不能很好的去除噪点。

#include<opencv2opencv.hpp>
#include<opencv2highguihighgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("lol4.jpg");
imshow("原始图", img);
Mat out;
blur(img, out,Size(5, 5));//-1指原图深度
imshow("均值滤波", out);
waitKey(0);
}

1093303-20170518142721978-3765094.png

高斯滤波
高斯滤波,可以消除高斯噪声,广泛应用于图像处理的减噪过程。

#include<opencv2opencv.hpp>
#include<opencv2highguihighgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("lol4.jpg");
imshow("原始图", img);
Mat out;
GaussianBlur(img, out, Size(3, 3), 0, 0);
imshow("高斯滤波", out);
waitKey(0);
}

从效果看出,高斯滤波的而模糊感明显降低
1093303-20170518142738150-440450511.png

非线性滤波:中值滤波、双边滤波

中值滤波

基本思想就是用像素点的领域灰度的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的细节(不会出现边缘模糊的情况)

中值滤波跟均值滤波的思想看起来很相似,只是一个取平均值,一个取中位数而已

#include<opencv2opencv.hpp>
#include<opencv2highguihighgui.hpp>
using namespace std;
using namespace cv;
//中值滤波
int main()
{
Mat img = imread("lol4.jpg");
imshow("原始图", img);
Mat out;
medianBlur(img, out, 7);//第三个参数表示孔径的线性尺寸,它的值必须是大于1的奇数
imshow("中值滤波", out);
waitKey(0);
}

1093303-20170518142754338-1399056380.png

现在说说中值滤波与均值滤波的比较:均值滤波中噪声成分会被加入到平均计算,所以输出是受到噪声的影响的。但是中值滤波中,由于噪声成分很难选上,所以基本不影响输出。当然好的性能也需要付出一点代价的,中值滤波花费的时间是均值滤波的5倍以上。

中值滤波一般采用奇数的卷积核。

中值滤波对一些细节多(特别是细、尖顶的)的图像不太适合。

双边滤波

双边滤波的最大特点就是做边缘保存。

#include<opencv2opencv.hpp>
#include<opencv2highguihighgui.hpp>
using namespace std;
using namespace cv;
//双边滤波
int main()
{
Mat img = imread("lol4.jpg");
imshow("原始图", img);
Mat out;
bilateralFilter(img, out, 25, 25 * 2, 25 / 2);
imshow("双边滤波", out);
waitKey(0);
}

效果图看来,双边滤波是所有滤波中最清晰的。
1093303-20170518142833713-572661246.png

最后

以上就是怕黑巨人为你收集整理的OpenCV探索之路(三):滤波操作的全部内容,希望文章能够帮你解决OpenCV探索之路(三):滤波操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部