opencv中的各种滤波函数

来源:互联网 发布:淘宝促销短信模板 编辑:程序博客网 时间:2024/06/05 09:50

在图像处理中,尽可能消除图片中的噪声,消除噪声就需要用到滤波,在本次opencv学习中,学习了三个滤波方式。

(1)平均滤波,就是将一个区域内的像素值求和取平均值,然后用这个平均值替换区域中心的像素值。

blur(源Mat对象,目标Mat对象,Size对象,Point对象)//Size对象用来确定区域大小,Point对象如果x,y都是-1则表示更新区域中心的像素。

(2)高斯滤波,也是将一个区域的像素值求取平均值替换区域中心的像素值,但是是加权平均,权重按照二维正态分布。

GaussianBlur(源Mat对象,目标Mat对象,Size对象,x方向正太分布参数,y方向正太分布参数)

(3)中值滤波,之前的两个滤波都有个问题,如果区域中有极端值,很可能影响滤波效果,中值滤波采用区域中的中值来替换,有利于克服椒盐噪声。

medianBlur(源Mat对象,目标Mat对象,int size)//这里的size表示正方形区域的边长

(4)双边滤波,之前的滤波还有个问题,他们都会把轮廓给模糊了,有一些区域之间相差较大的像素,这往往能看出轮廓,所以如果我们给个限制范围,如果两点间的像素值差距大于这个范围就不滤波了,保留图像轮廓

bilateralFilter(源Mat对象,目标Mat对象,int 区域半径,int 限制范围,int space)//space是当区域半径给的是0时,用来计算区域范围的,一般情况下没用,随便给个数就行。

演示代码:

#include<opencv2\opencv.hpp>#include<iostream>#include<math.h>#include<algorithm>using namespace std;using namespace cv;int main(){Mat src;src = imread("1.jpg", 1);if (src.empty()){printf("cannot load!!\n");return -1;}namedWindow("原图");imshow("原图", src);Mat dst,dst1;blur(src, dst, Size(3, 3), Point(-1, -1));namedWindow("均值滤波");imshow("均值滤波", dst);GaussianBlur(src, dst, Size(5, 5), 5, 5);namedWindow("高斯滤波");imshow("高斯滤波", dst);medianBlur(src, dst, 5);namedWindow("中值滤波");imshow("中值滤波", dst);bilateralFilter(src, dst, 5, 100, 3);namedWindow("双边滤波");imshow("双边滤波", dst);waitKey(0);return 0;}
演示结果:






从结果上可以看出,双边滤波效果最好,既保留了轮廓,皮肤更加平滑,如果再用掩膜提高下对比度。。。。。。。新的修图工具get!!







0 0
原创粉丝点击