本示例使用的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()
3,使用高斯滤波降噪
gauss_blur = cv2.GaussianBlur(noised, (7, 7), 0)
plt.imshow(gauss_blur[:, :, [0, 1, 2]])
plt.show()
4,使用中值滤波降噪
median_blur = cv2.medianBlur((noised * 255).astype(np.uint8), 7)
plt.imshow(median_blur[:, :, [0, 1, 1]])
plt.show()
5,使用双边滤波降噪
bilat = cv2.bilateralFilter(noised, -1, 0.3, 10)
plt.imshow(bilat[:, :, [0, 1, 2]])
plt.show()
程序说明
可以看出高斯效果好点,不过还是要根据不同的需求去做的。
使用 cv2.GaussianBlur
函数应用高斯滤波,详细用法请参考:OpenCc GaussianBlur方法
使用 cv2.medianBlur
函数应用中值模糊,详细用法请参考:OpenCV medianBlur方法
使用 cv2.bilateralFilter
函数应用双边滤波,详细用法请参考:OpenCV bilateralFilter方法