卷积的几个基本概念:
- 卷积核的大小:卷积核一般为奇数,如3*3,5*5,7*7等。在深度学习中卷积核越大,看到的信息越多,提取的特征越好,同时计算量也就越大。
- 锚点:简单说就是图片的正中心
- 边界扩充:当卷积核大于1且不进行边界扩充,输出尺寸相应缩小。当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将于输入相等。
- 步长
N=(W-F+2P)/S+1
N是输出图像大小
W是原图大小;F是卷积核大小;P是扩充尺寸
S是步长
低通滤波与高通滤波的概念
低通滤波指低于某个阈值之下的可以通过。低通滤波可以去除噪音或平滑图像。
高通滤波指高于某个阈值之上的可以通过。高通滤波可以帮助查找图像边缘。
图像卷积api:filter2D(src,ddepth,kernel,anchor,delta,borderType)
src:对哪张图片进行卷积
ddepth:经过卷积之后的图片位深(一般设置成-1,原始图片位深是多少,生成的新图就是多少)
kernel:卷积核
anchor:锚点(可以不设置,不设置会根据卷积核寻找锚点)
delta:卷积之后得到的元素加一个delta值,想加的话在这里设置
borderType:边界类型
方波滤波与均值滤波
如果我们每次都自己创造卷积核,这个过程还是非常麻烦的,有很多的滤波器都是固定的,比如方盒滤波和均值滤波,它们的核都是固定的,opencv给我们提供这些滤波器的api我们只需要调用即可。
方盒滤波公式:

对于不同的情况,a是取不同的值。方盒滤波有一个参数normalize。
normalize=true时,a=1/(W*H),就是一个均值滤波
normalize=false时,a=1。
当normalize==true时,方盒滤波==均值滤波。
方盒滤波api:boxFilter(src,ddpth,ksize,anchor,normalize,borderType)
Src:具体对哪个图像进行卷积
Ddpth:输出图像的位深
Ksize:卷积核的大小
Anchor:锚点,默认值都是(-1,-1),取核的中心点,所以不用特别设置,保持默认即可
borderType:输出的边界类型
均值滤波api:blur(src,ksize,anchor,borderType)
import cv2 import numpy as np # 导入一张图片 img=cv2.imread('你的图片') # 图片卷积,创造卷积核 dst=cv2.filter2D(img,-1,np.ones((5,5),np.float32)/25) # 均值滤波,5*5的均值滤波 dst1=cv2.blur(img,(5,5)) # 图片展示 cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.imshow('dst1',dst1) cv2.waitKey(0)