OpenCV-20卷积操作

一、什么是图像卷积

图像卷积就是卷积在图像上按照滑动遍历像素时不断的相乘求和的过程。

绿色为图片, 黄色为卷积核, 粉色为最终得到的卷积特征。

二、步长

步长就是卷积核在图像上移动的步幅,每次移动一个方格则步幅为1。且一般为1。

若步长越大,则 中间的像素点得不到扫描,最终的图像会更小一点。

三、padding

如果需要保持图片大小不变,我们需要在图片周围填充0.

padding指的就是填充0的层数。

我们可以通过公式计算需要填充的0的圈数。

输入体积大小:H1*W1*D1(分别为高度、宽度和通道数)

四个超参数:Filter数量K; (卷积核数量)

Filter大小F; (一般为基数 3*3, 5*5, 7*7)

步长S;

零填充大小P;

输出体积大小H2 * W2 * D2

H2 = (H1 - F + 2P) / S +1

W2 = (W1 - F + 2P) / S +1

D2 = K

如果要保持卷积之后的图片大小不变,可以得到等式:(N+2P-F+1) = N

从而推导出:P = (F-1) / 2 (默认S=1)

四、卷积核的大小

图片卷积中,卷积核一般为奇数,比如3*3, 5*5, 7*7,原因如下:

1)根据上面padding的公式,如果要保持图片大小不变,采用偶数卷积核的话,比如4*4,将会出现填充1.5圈0的情况。

2)奇数维度的过滤器由中心,便于指出过滤器的位置,即OpenCV卷积中的锚点。

五、卷积案例

使用API---fifter2D(src, ddepth, kernel [, dst [,anchor[, delta[, borderType]]])

-- ddepth是卷积之后图片的位深,即卷积之后的图片的数据类型,一般为-1,表示与原图一致。

-- kernel 是卷积核的大小,用元组或者ndarray表示,要求数据类型必须为float型。

-- anchor 锚点,即卷积核的中心点,是可选参数,默认是(-1, -1)

-- delta可选参数,表示卷积之后额外加的一个值,相当于线性方程中的偏差,默认为0。

-- borderType 边界类型,一般不设置。

网络上有许多图片处理的卷积核

示例代码如下:

复制代码
import cv2
import numpy as np

dog = cv2.imread("dog.png")

# 卷积核
# kernel = np.ones((5, 5),np.float32) / 25   # 相当于所有点/25取平均值,图片变得模糊
# 尝试其他的卷积核
kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])

# 卷积操作
new_dog = cv2.filter2D(dog, -1, kernel)
cv2.imshow("dog", dog)
cv2.imshow("new_dog", new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

相关推荐
AI周红伟4 分钟前
一天赚5个亿的超级个体天花板李一舟:普通人可借鉴的6点
大数据·人工智能·搜索引擎·copilot·openclaw
趣知岛5 分钟前
2026最新Python零基础入门教程,从环境搭建到实战精通(附源码)
python·青少年编程
MATLAB代码顾问6 分钟前
AI Agent智能体开发实战:LangChain自动化工作流
人工智能·langchain·自动化
永远不会的CC8 分钟前
Hello-Agents 初识智能体(实现一个简单旅游推荐智能体)
人工智能·学习·旅游
AI科技星11 分钟前
全域数学三元公理体系下π的射影几何本源阐释 - 基于兵棋推演框架改造:常温超导仿真验证【乖乖数学】
人工智能·线性代数·机器学习·量子计算·agi
sali-tec13 分钟前
C# 基于OpenCv的视觉工作流-章60-点点距离
图像处理·人工智能·opencv·算法·计算机视觉
Data-Miner24 分钟前
61页可编辑PPT | 人工智能基础知识培训
人工智能
TDengine (老段)31 分钟前
红有软件重构智能油田时序数据底座,支撑生产实时感知与设备预测性维护
大数据·数据库·人工智能·重构·时序数据库·tdengine
极智视界36 分钟前
分类数据集 - 糖尿病视网膜病变检测图像分类数据集下载
人工智能·yolo·数据集·图像分类·算法训练·医学影像分析·糖尿病视网膜病变检测
摘星编程38 分钟前
# 当AI学会了“打电话“:MCP协议如何重塑Agent生态
网络·人工智能