模糊操作的基本原理:1.基于离散卷积,2.定义好每个卷积核,3.不同卷积核得到不同的卷积效果,4.模糊是卷积的一种表象
import cv2 as cv
import numpy as np
def blur_demo(image): # 均值模糊
dst = cv.blur(image, (5, 5)) # (5, 5)模糊参数,第一个5是水平模糊,第二个5是垂直模糊
cv.imshow("blur_demo", dst)
def median_demo(image): # 中值模糊,对椒盐噪声有很好的的去噪效果
dst = cv.medianBlur(image, 5) # 5模糊参数
cv.imshow("median_demo", dst)
def custom_demo(image): # 自定义模糊
kernel = np.ones([5, 5], np.float32)/25 # 保证值不会溢出
# kernel = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]], np.float32)/9
# kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 该参数起到锐化效果
dst = cv.filter2D(image, -1, kernel=kernel)
cv.imshow("custom_demo", dst)
src = cv.imread("C:/Users/admin/Desktop/16.jpg") # 打开一张图片
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) # 设置图片尺寸,自动
cv.imshow("input image", src) # 显示图像
blur_demo(src)
median_demo(src)
custom_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
效果
调整自定义模糊中的参数,可以得到不同的效果
如果设置成如下参数:
kernel = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]], np.float32)/9
设置成
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 该参数起到锐化效果