当前位置:   article > 正文

【OpenCV4】高斯滤波 cv::GaussianBlur() 用法详解和代码示例(c++)

cv::gaussianblur

作用原理:

图像采集过程中,常常会引入高斯噪声,即这是一种按照高斯曲线进行分布的噪声
在这里插入图片描述
所以使用高斯滤波来进行图像去噪

高斯滤波考虑了像素离开滤波器中心的距离影响,中心位置为高斯分布均值,比如上图为 0

根据高斯分布公式,和滤波器所覆盖像素距离中心的距离,就可以计算每个像素被滤波后的像素值,即执行了一个卷积操作

函数原型:

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

解析:

  • src:输入图像,可以是任意通道数
  • dst:输出图像,与输入图像具有相同的尺寸,通道数,和类型
  • ksize:滤波器尺寸,可以不是正方形,但是必须为正奇数(如果设置为 0,则由输入的标准差来计算所需的尺寸)
  • sigmaX:X 方向高斯滤波器标准差
  • sigmaY:Y 方向高斯滤波器标准差(如果输入 0,则会被设置成等于 sigmaX,如果 sigmaX 和 sigmaY 都输入 0,则会根据滤波器尺寸来计算得到标准差)
  • borderType:像素外推法

代码示例:

void TestGaussianBlur()
{
    cv::Mat lena = cv::imread("lena.jpg", 1);
    cv::Mat blurred_3x3;
    cv::Mat blurred_5x5;
    cv::Mat blurred_7x7;
    cv::GaussianBlur(lena, blurred_3x3, cv::Size(3, 3), 0, 0);
    cv::GaussianBlur(lena, blurred_5x5, cv::Size(5, 5), 0, 0);
    cv::GaussianBlur(lena, blurred_7x7, cv::Size(7, 7), 0, 0);

    cv::imshow("lena", lena);
    cv::imshow("blurred_3x3", blurred_3x3);
    cv::imshow("blurred_5x5", blurred_5x5);
    cv::imshow("blurred_7x7", blurred_7x7);
    cv::waitKey(0);

    return;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

原图:

在这里插入图片描述

使用 3X3 的 kernel:
在这里插入图片描述
使用 5X5 的 kernel:
在这里插入图片描述
使用 7X7 的 kernel:
在这里插入图片描述
可以看到,kernel 越大,去除噪声(平滑)的效果越明显,但同时,图像也会越模糊!

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

闽ICP备14008679号