1. 基础概念

  • 腐蚀操作:形态学操作的一种,用于 缩小图像中前景(白色区域)并扩展背景(黑色区域)

  • 前景:二值图像中白色部分(像素值 255)

  • 背景:黑色部分(像素值 0)

作用

  1. 去除小白点噪声

  2. 分离相连的白色区域

  3. 缩小前景对象,用于边界分析

  4. 与膨胀组合 → 开运算、闭运算


2. 数学原理

腐蚀操作依赖一个 结构元素(Kernel / 卷积核)

解释:

  1. 卷积核覆盖图像中心像素

  2. 取覆盖区域最小值作为中心像素的新值

  3. 只要邻域内有黑色像素 → 中心像素变黑 → 白色区域缩小

可视化原理:

假设 3×3 核覆盖的区域:


[255, 255, 255]
[255,   0, 255]
[255, 255, 255]

  • 最小值 = 0 → 中心像素更新为 0

  • 白色区域被缩小,黑色区域扩展


3. 卷积核(结构元素)

核大小:

  • 核越大 → 白色区域缩小越多

  • 核越小 → 白色区域缩小幅度小

核形状:

  • MORPH_RECT:矩形核,腐蚀均匀

  • MORPH_ELLIPSE:椭圆核,边缘腐蚀圆润

  • MORPH_CROSS:十字核,方向性腐蚀明显

创建方法:

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


4. OpenCV 实现

语法:

cv2.erode(src, kernel, iterations=1)

  • src:输入图像(灰度或二值图像)

  • kernel:卷积核

  • iterations:腐蚀次数(次数越多,白色区域越小)

示例代码:

import cv2
import numpy as np

# 读取二值图像
img = cv2.imread("binary.png", 0)

# 创建卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))

# 腐蚀操作
eroded = cv2.erode(img, kernel, iterations=2)

# 显示结果
cv2.imshow("Original", img)
cv2.imshow("Eroded", eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()


5. 核心要点

  1. 原理:取卷积核覆盖区域最小值 → 白色缩小、黑色扩展

  2. 核大小与形状:决定腐蚀强度和方向

  3. 迭代次数:控制腐蚀幅度

  4. 应用组合

    • 腐蚀 + 膨胀 → 开运算(去小白点噪声)、闭运算(连接断裂物体)


6. 练习任务

  1. 使用不同大小卷积核(3×3、5×5、7×7)观察腐蚀效果。

  2. 尝试不同形状卷积核(矩形、椭圆、十字)对比效果。

  3. 调整 iterations 次数,观察白色区域缩小变化。

  4. 与膨胀组合处理噪声图片,理解开运算和闭运算效果。


重点记忆

  • 腐蚀 → 缩小前景(白色),扩展背景(黑色)

  • 卷积核大小、形状、迭代次数 → 决定腐蚀强度

  • 数学本质 → 每个像素取卷积核覆盖区域最小值

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐