欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

OpenCV 从零学习 · 第 10 讲:形态学操作(腐蚀/膨胀/开闭运算,去噪、填空洞)

OpenCV 从零学习 · 第 10 讲:形态学操作

函数:cv2.erode / cv2.dilate / cv2.morphologyEx | 难度:★★☆☆☆

形态学(Morphology)是一组针对二值图的形状操作:把前景(白色)按一个"小模板"(结构元素)去擦、去补、去连。它是去椒盐噪点、填补空洞、断开粘连、提取边缘的利器,常排在阈值化/轮廓之后使用。本讲讲清腐蚀、膨胀,以及由它们组合出的"开运算 / 闭运算"。


一、结构元素(内核)

所有形态学操作都依赖一个"核"——决定操作的形状和范围,用 cv2.getStructuringElement 生成。

kernel = cv2.getStructuringElement(shape, ksize)
shape 形状
cv2.MORPH_RECT矩形(最常用)
cv2.MORPH_ELLIPSE椭圆
cv2.MORPH_CROSS十字形

例:kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))


二、腐蚀与膨胀(基础两招)

dst = cv2.erode(src, kernel, iterations=1)
dst = cv2.dilate(src, kernel, iterations=1)
操作 效果(前景=白) 直觉
erode 腐蚀白色区域"变瘦"去掉小白点、断开细连接
dilate 膨胀白色区域"变胖"填补小黑洞、连接断开
⚠ 关键认知
形态学操作默认把白色当"前景/物体"。如果你的图是"黑字白底",腐蚀会把字加粗、膨胀会把字变细——和直觉相反。处理前确认黑白关系,必要时用 THRESH_BINARY_INV 反转。

三、组合运算 cv2.morphologyEx

dst = cv2.morphologyEx(src, op, kernel)
op 组成 典型用途
MORPH_OPEN先腐蚀后膨胀去掉前景上的小白点(噪点)
MORPH_CLOSE先膨胀后腐蚀填补前景里的小黑洞
MORPH_GRADIENT膨胀 − 腐蚀提取物体轮廓边缘
MORPH_TOPHAT原图 − 开运算提取比背景亮的细节(划痕、纹路)
MORPH_BLACKHAT闭运算 − 原图提取比背景暗的细节
场景 A · 开运算去椒盐噪点
一张带白色小噪点的二值图:cv2.morphologyEx(bin, cv2.MORPH_OPEN, kernel)——先腐蚀把小白点"擦掉",再膨胀把主体恢复原状,噪点没了、主体还在。比中值滤波更"结构化"(中值见第 5 讲)。
场景 B · 闭运算填补文字断口
扫描件里笔画被噪点打断成一段段:MORPH_CLOSE 先膨胀把断口连上,再腐蚀恢复粗细,文字笔画变连贯。
场景 C · 形态学梯度提取边缘
MORPH_GRADIENT = 膨胀图减腐蚀图,正好得到物体"轮廓一圈",可作为轻量边缘提取(弱于 Canny 但快)。
场景 D · 顶帽提取亮纹
在均匀背景上找比周围亮的细线(如指纹、划痕):MORPH_TOPHAT 把"开运算削掉的小亮结构"凸显出来。
import cv2
bin = cv2.imread('binary.png', cv2.IMREAD_GRAYSCALE)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
opened  = cv2.morphologyEx(bin, cv2.MORPH_OPEN,  kernel)  # 去小白点
closed  = cv2.morphologyEx(bin, cv2.MORPH_CLOSE, kernel)  # 填小黑洞
grad    = cv2.morphologyEx(bin, cv2.MORPH_GRADIENT, kernel)  # 边缘
⚠ 新手必踩坑
  • 形态学操作吃二值图效果最好;喂灰度图理论上能跑,但语义是"按亮度做形态学",结果不直观。
  • 开 / 闭运算顺序别搞反:开=先腐蚀后膨胀(去噪点),闭=先膨胀后腐蚀(填空洞)。
  • kernel 越大、iterations 越多,作用越强,但也越容易伤到主体——按需调小。

本讲要点

  • 腐蚀(瘦)/ 膨胀(胖)默认作用于白色前景;黑白反了先反转。
  • 开运算去噪点、闭运算填空洞;梯度提边缘;顶/黑帽提亮/暗细节。
  • 核心参数:结构元素 kernel 的形状与大小,决定作用强度。

系列小结:第 1~10 讲覆盖了 OpenCV 入门主干(读显存 → 像素/ROI → 色彩空间 → 几何变换 → 滤波 → 阈值 → 边缘 → 轮廓 → 绘制 → 形态学)。后续可进阶:直方图均衡、模板匹配、特征点(SIFT/ORB)、视频读写、人脸检测等。欢迎在「技术文档」板块继续追更。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功