当图片中有噪点时,OpenCV对图片可以实现很好的降噪处理。降噪的方式有:方盒滤波、均值滤波和中值滤波。
今天小编就用代码分别来介绍演示它们的区别。
1、方盒滤波
#方盒滤波的方法
# boxFilter(src, ddepth, ksizel, dst[, anchorl, normalizel, borderType]]lll) 方盒滤波.
# o normalize= True时, a=1/(W*H)滤波器的宽高
# o normalize = False是.a=1
# 。一般情况我们都使用normalize=True的情况.这时方盒滤波等价于均值滤波
# blur(src, ksizel,dstl, anchorl, borderType]ll)均滤波.
# filter2D(src, ddepth, kernell, dstl, anchorl, deltal, borderType]]]])
# 。ddepth是卷积之后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致.
# 。kernel是卷积核大小,用元组或者ndarray表示,要求数据类型必须是float型.
# 。anchor锚点,即卷积核的中心点,是可选参数,默认是(-1,-1)
# 。delta可选参数,表示卷积之后额外加的一个值,相当于线性方程中的偏差,默认是0.
# 。borderType 边界类型.一般不设.
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
img = cv2.imread('./images/opencv-dot.png')
# 不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少.
# 方盒滤波
dst = cv2.boxFilter(img, -1, (9, 9), normalize=True)
# 显然卷积之后的图片模糊了
cv2_imshow('img', np.hstack((img, dst)))
2、均值滤波
#均值滤波
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
img = cv2.imread('./images/opencv-dot.png')
# 不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少.
# 均值滤波
dst = cv2.blur(img, (9, 9))
# 显然卷积之后的图片模糊了
cv2_imshow('img', np.hstack((img, dst)))
3、中值滤波
#中值滤波
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
img = cv2.imread('./images/opencv-dot.png')
# 不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少.
# 中值滤波
# 中值滤波原理非常简单,假设有一个数组[1556789],取其中的中间值(即中位数)作为卷积后的结果值即可.
# 中值滤波对胡椒噪音(也叫椒盐噪音)效果明显.
dst = cv2.medianBlur(img, 7)
# 显然卷积之后的图片模糊了
cv2_imshow('img', np.hstack((img, dst)))
经过对比发现,中值滤波对图片的降噪处理效果最好。

全部评论