当前位置:   article > 正文

利用OpenCV的函数GaussianBlur()对图像进行高斯滤波_opencv高斯滤波函数

opencv高斯滤波函数

高斯滤波是常见的滤波处理方法。

高斯滤波器本质上是一个低通滤波器,所以对图像进行高斯滤波运算后,图像的高频分量会被滤除,体现出来的效果是图像被模糊化处理了。

OpenCV提供了函数GaussianBlur()对图像进行高斯滤波处理。其函数原型如下:

  1. void cv::GaussianBlur ( InputArray src,
  2. OutputArray dst,
  3. Size ksize,
  4. double sigmaX,
  5. double sigmaY = 0,
  6. int borderType = BORDER_DEFAULT
  7. )

其参数意义如下:

src---待高斯滤波图像,图像可以具有任意的通道数目,每个通道会被独立滤波,每个通道的数据类型必须为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。

dst---输出图像,与输入图像src具有相同的尺寸、通道数和数据类型。

ksize---高斯滤波器高斯核的尺寸,滤波器的长和宽可以不一样,但是必须都是正奇数。如果尺寸填为0,则由下面的标准差参数自动计算尺寸。

sigmaX---高斯核在X方向上的标准差。

sigmaY---高斯核在Y方向上的标准差,如果这个参数的值为0,那么sigmaY=sigmaX。如果sigmaY=sigmaX=0,则根据高斯核的尺寸来自动计算两个方向上的标准差。为了更好地控制这个滤波过程,建议大家对参数ksize、sigmaX、sigmaY都进行填写。

borderType---边界扩展处理方式。有关图像边界扩展方式可以参考我写的另一篇博文,链接 https://blog.csdn.net/wenhao_ir/article/details/12417798

据说高斯滤波器对服从高斯分布的噪声滤除效果还不错,所以本文的示例代码就用高斯滤波器来对按高斯分布产生的随机噪声图像进行滤波处理。

代码如下:

  1. //博主微信/QQ 2487872782
  2. //有问题可以联系博主交流
  3. //有图像处理需求也可联系博主
  4. //图像处理技术交流QQ群 271891601
  5. //OpenCV版本:3.0
  6. //VS版本:2012
  7. #include <opencv2/core/core.hpp>
  8. #include <opencv2/highgui/highgui.hpp>
  9. #include<opencv2/imgcodecs/imgcodecs.hpp>
  10. #include <opencv2/imgproc/imgproc.hpp>
  11. #include <time.h>
  12. #include <iostream>
  13. using namespace cv;
  14. using namespace std;
  15. int main()
  16. {
  17. //生成按高斯分布的噪声图像
  18. Mat image_gaussian_noise( cv::Size(400,300), CV_8UC3, cv::Scalar(0,0,0) );
  19. RNG rng(time(NULL));
  20. rng.fill(image_gaussian_noise, RNG::NORMAL, 0, 30); /*用高斯分布随机数填充图像*/
  21. imshow("原噪声图像", image_gaussian_noise);
  22. Mat dst;
  23. GaussianBlur(image_gaussian_noise, dst, Size(3, 3),0, 0);
  24. imshow("3*3高斯核滤波后的图像", dst);
  25. GaussianBlur(image_gaussian_noise, dst, Size(5, 5),0, 0);
  26. imshow("5*5高斯核滤波后的图像", dst);
  27. GaussianBlur(image_gaussian_noise, dst, Size(9, 9),0, 0);
  28. imshow("9*9高斯核滤波后的图像", dst);
  29. waitKey(0);
  30. return EXIT_SUCCESS;
  31. }

运行结果如下图所示:

可见,滤波效果还是不错的,大家在使用中可根据实际的图像去调整相应的参数以达到最优效果。不过要注意的是,由于高斯噪声的频谱几乎是均匀分布的,详情参考我的另一篇博文:https://blog.csdn.net/wenhao_ir/article/details/124566310  所以要想完全滤除高斯噪声也是不现实的。

上面代码中用到了类RNG来产生高斯噪声,它的用法可以参考我的另一篇博文,链接:https://blog.csdn.net/wenhao_ir/article/details/51698089

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/963869
推荐阅读
相关标签
  

闽ICP备14008679号