图像滤波

转载于:https://blog.csdn.net/zoucharming/article/details/70197863

在图像处理中,尽可能消除图片中的噪声,消除噪声就需要用到滤波,在本次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时,用来计算区域范围的,一般情况下没用,随便给个数就行。

演示代码:


   
   
   
   
  1. #include
  2. #include
  3. #include
  4. #include
  5. using namespace std;
  6. using namespace cv;
  7. int main()
  8. {
  9. Mat src;
  10. src = imread( "1.jpg", 1);
  11. if (src.empty())
  12. {
  13. printf( "cannot load!!\n");
  14. return -1;
  15. }
  16. namedWindow( "原图");
  17. imshow( "原图", src);
  18. Mat dst,dst1;
  19. blur(src, dst, Size( 3, 3), Point( -1, -1));
  20. namedWindow( "均值滤波");
  21. imshow( "均值滤波", dst);
  22. GaussianBlur(src, dst, Size( 5, 5), 5, 5);
  23. namedWindow( "高斯滤波");
  24. imshow( "高斯滤波", dst);
  25. medianBlur(src, dst, 5);
  26. namedWindow( "中值滤波");
  27. imshow( "中值滤波", dst);
  28. bilateralFilter(src, dst, 5, 100, 3);
  29. namedWindow( "双边滤波");
  30. imshow( "双边滤波", dst);
  31. waitKey( 0);
  32. return 0;
  33. }
演示结果:

图像滤波_第1张图片

图像滤波_第2张图片

图像滤波_第3张图片

图像滤波_第4张图片

图像滤波_第5张图片

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







你可能感兴趣的:(图像滤波)