均值滤波
opencv使用均值滤波是通过cv2.blur来实现的,原理十分简单,就是根据周围取平均值
下面对方法进行介绍
def blur(src, ksize, dst=None, anchor=None, borderType=None)
- src:输入图像
- ksize:卷积核大小,是一个元组
- dst:输出图像
- anchor:锚点;默认值 Point(-1,-1) 表示锚点位于内核中央。
- borderType:用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT
这个滤波对椒盐噪声效果比较好
import cv2
import numpy as np
lp = cv2.resize(cv2.imread('../images/jiaoyan.png'), None, fx=0.8, fy=0.8)
new_lp1 = cv2.blur(lp, (5, 5))
cv2.imshow('lp', np.hstack((lp, new_lp1)))
cv2.waitKey(0)
cv2.destroyAllWindows()
方盒滤波
opencv方盒滤波通过cv2.boxFilter函数来实现,这个函数和cv2.blur基本一样的,当normalize=True时,与均值滤波结果相同, normalize=False,不进行归一化,大于255的使用255表示
下面对函数进行介绍
def boxFilter(src, ddepth, ksize, dst=None, anchor=None, normalize=None, borderType=None)
- src:输入图像
- ddepth:输出图像深度,-1表示与原图像一样,一般都是-1
- ksize:卷积核大小,是一个元组
- dst:输出图像
- anchor:锚点;默认值 Point(-1,-1) 表示锚点位于内核中央。
- normalize:标识符,表示内核是否被其区域归一化。
- borderType:用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT
由于归一化和cv2.blur一样的,下面就展示不进行归一化的图像
import cv2
import numpy as np
lp = cv2.resize(cv2.imread('../images/jiaoyan.png'), None, fx=0.8, fy=0.8)
new_lp1 = cv2.boxFilter(lp, -1, (2, 2), normalize=False)
cv2.imshow('lp', np.hstack((lp, new_lp1)))
cv2.waitKey(0)
cv2.destroyAllWindows()
不进行归一化,大部分都变成了白色