均值模糊、中值模糊、自定义模糊:
import cv2 as cv
import numpy as np
def blur_demo(image):
dst = cv.blur(image, (5, 5))#均值模糊
cv.imshow("blur_demo", dst)
def median_demo(image):#中值模糊
dst = cv.medianBlur(image, 5)
cv.imshow("median_demo", dst)
def custom_blur_demo(image):#自定义模糊 实现中值模糊
kernal = np.ones([5, 5], np.float32)/25
"""
声明二维数组5*5,初始化1,保证值不溢出,除以数组大小,实现中值模糊,自定义卷积核的算子
上述生成的5*5核模板其实就是一个均值滤波。,当我们是/25就是中值滤波,归一化处理
"""
dst = cv.filter2D(image, -1, kernel = kernal)
cv.imshow("custom_blur_demo", dst)
print("--------- Hello Python ---------")
src = cv.imread("D:/opencv/red.jpeg")
cv.namedWindow("red")
cv.imshow("red", src)
custom_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
均值模糊
均值滤波是典型的线性滤波算法,模糊是卷积的一种表象,所有的滤波模板都是使卷积框覆盖区域所有像素点与模板相乘后得到的值作为中心像素的值,比如一个33的模板其实就可以如下表示
均值模糊函数blur():
定义:blur(src, ksize, dst = None, anchor=None, borderType=None),定义是有5个参数,但最后3个均为none,所以也就2个参数
src:要处理的原图像
ksize:必须是奇数卷积核,周围关联的像素的范围:代码中(5,5)就是55的大小,就是计算这些范围内的均值来确定中心位置的大小
中值模糊
中值滤波模板就是用卷积框中像素的中值代替中心值,达到去噪声的目的。 这个模板一般用于去除椒盐噪声。 前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代他,卷积核的大小也是个奇数。
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值模糊函数medianBlur():
定义:medianBlur(src, ksize, dst=None)
ksize与blur()函数不同,不是矩阵,而是一个数字,例如为5,就表示5*5的方阵
自定义模糊:
滤波函数的使用需要一个核模板,对图像的滤波操作过程为:将核模板放在图像的一个像素A上,求与之对应的图像上的每个像素点的和,核不同,得到的结果不同,而滤波的使用核心也是对于这个核模板的使用,需要注意的是,该滤波函数是单通道运算的,也就是说对于彩色图像的滤波,需要将彩色图像的各个通道提取出来,对各个通道分别滤波才行。
filter2D(src,ddepth,kernel):
ddepth:深度,输入值为-1时,目标图像和原图像深度保持一致
kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵
1.实现中值模糊
def custom_blur_demo(image):#自定义模糊 实现中值模糊
kernal = np.ones([5, 5], np.float32)/25
"""
声明二维数组5*5,初始化1,保证值不溢出,除以数组大小,实现中值模糊,自定义卷积核的算子
上述生成的5*5核模板其实就是一个均值滤波。,当我们是/25就是中值滤波,归一化处理
"""
dst = cv.filter2D(image, -1, kernel = kernal)
cv.imshow("custom_blur_demo", dst)
2.实现锐化处理
使用的kernal是:
实现锐化处理,提高图像的对比度,提高立体感,轮廓更加清晰。
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
dst = cv.filter2D(img,-1,kernel = kernal)