C++ opencv之图像去噪(blur,GaussianBlur,medianBlur,fastNlMeansDenoisingColored)

本文介绍了OpenCV中四种图像去噪方法:均值去噪、高斯模糊、非局部均值去噪和双边滤波,并提供了代码演示和结果展示,特别强调非局部均值去噪在保留图像细节方面的优秀效果。
摘要由CSDN通过智能技术生成


上篇博客我们学到了图像添加噪声,这篇我们来学习图像去噪声。
OpenCV中常见的图像去噪声的方法有:

- 均值去噪声
- 高斯模糊去噪声
- 非局部均值去噪声
- 双边滤波去噪声
- 形态学去噪声

一、主要内容

这里均值去噪声、高斯模糊之前也讲过了,后面两个方法之后再讲。

1.1 均值去噪声

1.2 高斯模糊去噪声

1.3 非局部均值去噪声

L-Means的全称是:Non-Local Means,直译过来是非局部平均,在2005年由Baudes提出,该算法使用自然图像中普遍存在的冗余信息来去噪声。与常用的双线性滤波、中值滤波等利用图像局部信息来滤波不同的是,它利用了整幅图像来进行去噪,以图像块为单位在图像中寻找相似区域,再对这些区域求平均,能够比较好地去掉图像中存在的高斯噪声。与我们以前学习的平滑技术相比这种算法要消耗更多的时间,但是结果很好。对于彩色图像,要先转换到 CIELAB 颜色空间,然后对 L 和 AB 成分分别去噪。

相关的函数有:

cv2.fastNlMeansDenoising() - 使用单个灰度图像
cv2.fastNlMeansDenoisingColored() - 使用彩色图像。
cv2.fastNlMeansDenoisingMulti() - 用于在短时间内捕获的图像序列(灰度图像)
cv2.fastNlMeansDenoisingColoredMulti() - 与上面相同,但用于彩色图像。

函数原型:

fastNlMeansDenoisingColored( InputArray src, 
				OutputArray dst,
                  float h = 3, float hColor = 3,
         int templateWindowSize = 7, int searchWindowSize = 21)

共同参数有:

• h : 决定过滤器强度。h 值高可以很好的去除噪声,但也会把图像的细节抹去。(10 的效果不错)
• hForColorComponents : 与 h 相同,但使用与彩色图像。(与 h 相同,10)
• templateWindowSize : 奇数。(推荐值为 7)
• searchWindowSize 
  • 3
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
C++中的OpenCV库提供了GaussianBlur函数,用于对图像进行高斯模糊处理。高斯模糊是一种常用的图像处理方法,可以有效地去除图像中的噪声和细节,使图像变得更加平滑。 GaussianBlur函数的原型如下: ```cpp void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT); ``` 参数说明: - src:输入图像,可以是单通道或多通道图像,类型为CV_8U、CV_16U、CV_32F或CV_64F。 - dst:输出图像,与输入图像具有相同的尺寸和类型。 - ksize:高斯核的大小,可以通过指定一个正的奇数值来表示核的宽度和高度。例如,Size(3, 3)表示一个3x3的核。 - sigmaX:X方向上的高斯核标准差。 - sigmaY:Y方向上的高斯核标准差。如果sigmaY为0,则默认与sigmaX相同。 - borderType:边界模式,默认为BORDER_DEFAULT。 下面是一个示例代码,演示如何使用GaussianBlur函数对图像进行高斯模糊处理: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { // 读取图像 Mat image = imread("image.jpg"); // 检查图像是否成功读取 if (image.empty()) { std::cout << "Failed to read image!" << std::endl; return -1; } // 高斯模糊处理 Mat blurredImage; GaussianBlur(image, blurredImage, Size(5, 5), 0, 0); // 显示原始图像和模糊后的图像 imshow("Original Image", image); imshow("Blurred Image", blurredImage); waitKey(0); return 0; } ``` 这段代码首先使用imread函数读取一张图像,然后使用GaussianBlur函数对图像进行高斯模糊处理,并将结果显示出来。 希望对你有所帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值