import cv2
import numpy as np
__author__ = "zxsuperstar"
__email__ = "[email protected]"
def blur_demo(image): #均值模糊 去随机噪声有很好的去燥效果
dst = cv2.blur(image,(5,5))
cv2.imshow("dst",dst)
def median_blur_demo(image): #中值模糊 ,去噪(椒盐噪声)
dst = cv2.medianBlur(image,3)
cv2.imshow("dst",dst)
def custom_blur_demo(image): #自定义卷积核
# kernel = np.ones([5,5],np.float32)/25
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32) #锐化 总和等于0,一般边缘梯度, 总和等于1,一般是增强
dst = cv2.filter2D(image,-1,kernel=kernel)
cv2.imshow("dst",dst)
if __name__ == "__main__":
src = cv2.imread("t.jpg") #blue green red
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("image",src)
# median_blur_demo(src)
# blur_demo(src)
custom_blur_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
1.均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
低通滤波(均值模糊)函数原型:blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst
src参数表示待处理的输入图像。
ksize参数表示模糊内核大小。比如(1,15)表示生成的模糊内核是一个1*15的矩阵。
dst参数表示输出与src相同大小和类型的图像。
anchor参数、borderType参数可忽略
2.中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。具体原理参见博客:https://blog.csdn.net/weixin_37720172/article/details/72627543
中值滤波(中值模糊)函数原型:medianBlur(src, ksize[, dst]) -> dst
src参数表示待处理的输入图像。
ksize参数表示滤波窗口尺寸,必须是奇数并且大于1。比如这里是5,中值滤波器就会使用5×5的范围来计算,即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
dst参数表示输出与src相同大小和类型的图像。
3.用户自定义模糊
所用函数:filter2D()
函数原型: filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst
src参数表示待处理的输入图像。
ddepth参数表示目标图像深度,输入值为-1时,目标图像和原图像深度保持一致
kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵。修改kernel矩阵即可实现不同的模糊