凌顺
凌顺

目录

OpenCV Python 使用高斯,中值,双边滤波去除噪声

本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0

实例目的

在真是的图像中都是有噪声(噪点)的,噪声不仅会破坏图像的清晰度,还会使我们的的算法更难将其作为输入处理。在本例程中,学会如何消除或大幅减少噪音。

实现程序

1,加载必要的库和显示原图

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('dog.png').astype(np.float32) / 255
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

2,为原图添加噪音

noised = (img + 0.2 * np.random.rand(*img.shape).astype(np.float32))
noised = noised.clip(0, 1)
plt.imshow(noised[:,:,[0,1,2]])
plt.show()

file

3,使用高斯滤波降噪

gauss_blur = cv2.GaussianBlur(noised, (7, 7), 0)
plt.imshow(gauss_blur[:, :, [0, 1, 2]])
plt.show()

file

4,使用中值滤波降噪

median_blur = cv2.medianBlur((noised * 255).astype(np.uint8), 7)
plt.imshow(median_blur[:, :, [0, 1, 1]])
plt.show()

file

5,使用双边滤波降噪

bilat = cv2.bilateralFilter(noised, -1, 0.3, 10)
plt.imshow(bilat[:, :, [0, 1, 2]])
plt.show()

file

程序说明

可以看出高斯效果好点,不过还是要根据不同的需求去做的。

使用 cv2.GaussianBlur 函数应用高斯滤波,详细用法请参考:
https://docs.opencv.org/4.1.1/d4/d86/group__imgproc__filter.html#gaabe8c836e97159a9193fb0b11ac52cf1

使用 cv2.medianBlur 函数应用中值模糊,详细用法请参考:
https://docs.opencv.org/4.1.1/d4/d86/group__imgproc__filter.html#ga564869aa33e58769b4469101aac458f9

使用 cv2.bilateralFilter 函数应用双边滤波,详细用法请参考:
https://docs.opencv.org/4.1.1/d4/d86/group__imgproc__filter.html#ga9d7064d478c95d60003cf839430737ed