1.卷积的API
#filter2D(img,ddepth,kernel,dst,anchor,delta,borderType)
#img:图片
#ddepth:卷积后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致
#kernal:卷积盒,用元组或者ndarray表示,里面的数据类型都为folat
#下面都缺省参数
#anchor:锚点,即卷积盒中心点,默认是(-1,-1)
#dalta:表示卷积之后额外增加的一个值bis,相当于线性方程中的偏差值,默认为0
#borderType:边界类型,一般不设
new_dog = cv2.filter2D(dog,-1,kernel)
一般在python中用numpy的ndarray数据类型来创建卷积核,如下所示:
#定义卷积盒 卷积盒必须是float32类型
#这样的一个卷积盒每一个空格都是1/25,进行卷积运算相当于把周围5*5区域内的像素取了个平均值
#可以想象到这个卷积盒的作用是使图片变得模糊
kernel = np.ones((5,5),np.float32)/25
#可以尝试其他的卷积盒,比如下面这个是提取轮廓的卷积盒:
kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
#这是一个浮雕效果的卷积盒
kernel = np.array([[-2,1,0],[-1,1,1],[0,1,2]])
#锐化效果的卷积盒
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])
2.完整代码
import cv2
import numpy as np
dog = cv2.imread("image/dog.png")
#定义卷积盒 卷积盒必须是float32类型
#这样的一个卷积盒每一个空格都是1/25,进行卷积运算相当于把周围5*5区域内的像素取了个平均值
#可以想象到这个卷积盒的作用是使图片变得模糊
kernel = np.ones((5,5),np.float32)/25
#可以尝试其他的卷积盒,比如下面这个是提取轮廓的卷积盒:
kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
#这是一个浮雕效果的卷积盒
kernel = np.array([[-2,1,0],[-1,1,1],[0,1,2]])
#锐化效果的卷积盒
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])
#filter2D(img,ddepth,kernel,dst,anchor,delta,borderType)
#img:图片
#ddepth:卷积后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致
#kernal:卷积盒,用元组或者ndarray表示,里面的数据类型都为folat
#下面都缺省参数
#anchor:锚点,即卷积盒中心点,默认是(-1,-1)
#dalta:表示卷积之后额外增加的一个值bis,相当于线性方程中的偏差值,默认为0
#borderType:边界类型,一般不设
new_dog = cv2.filter2D(dog,-1,kernel)
cv2.imshow("show",np.hstack((dog,new_dog)))
cv2.waitKey(0)
cv2.destroyAllWindows()