在图像上个人觉得卷积就是:对于某一位置的像素,通过算法来把它附近的所有像素点的值联合起来,重新设置这个像素的大小。(大概就是这样)
这个算法类似有:均值,中值,就是取周围所有像素的均值、中值来设置这个像素的大小。
(关于边界问题:有几种填充方法:补零、边界复制、块复制、镜像复制等方法)
代码如下:
#导入cv模块
import cv2 as cv
import numpy as np
def blur_demo(image): #均值模糊
dst=cv.blur(image,(1,3))
cv.imshow("blur_demo",dst)
def median_blur_demo(image): #中值模糊
dst=cv.medianBlur(image,5)
cv.imshow("median_blur_demo",dst)
'''
custom_blur:自定义模糊、锐化,中间像素比重为5,其他为0和-1,总权重为1
算子自定义取值:奇数,总和为1或0,总和为0:做边缘梯度,总和为1:做增强
'''
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)
dst=cv.filter2D(image,-1,kernel=kernel)
cv.imshow("custom_blur_demo",dst)
print("------------Hi,Python!-------------")
# 读取图像,支持 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/2.jpg")
#创建窗口并显示图像
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src) #显示原图
blur_demo(src)
median_blur_demo(src)
custom_blur_demo(src)
cv.waitKey(0)
#释放窗口
cv.destroyAllWindows()
运行效果:
1.均值模糊函数blur():定义:blur(src,ksize,dst=None, anchor=None, borderType=None)
定义是有5个参数,但最后三个均为none,所以也就2个参数
src:要处理的原图像
ksize: 周围关联的像素的范围:代码中(5,5)就是9*5的大小,就是计算这些范围内的均值来确定中心位置的大小
2.中值模糊函数medianBlur(): 定义:medianBlur(src, ksize, dst=None)
ksize与blur()函数不同,不是矩阵,而是一个数字,例如为5,就表示了5*5的方阵
3.高斯平滑函数GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
sigmaX:标准差
4、自定义模糊:
使用的函数为:filter2D():定义为filter2D(src,ddepth,kernel)
ddepth:深度,输入值为-1时,目标图像和原图像深度保持一致
kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵
修改kernel矩阵即可实现不同的模糊
5.双边滤波函数bilateralFilter():定义:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
d:邻域直径
sigmaColor:颜色标准差
sigmaSpace:空间标准差
参考资料:http://lib.csdn.net/article/opencv/25920