前面已经做过 Global Threshold、Otsu Threshold 和 Adaptive Threshold,这些方法可以把图片转换成二值图。
但二值化之后,经常还会出现一个问题:
小噪点、碎片和孔洞很多。
所以这次我用华为云码道辅助开发了一个基于 OpenCV 的:
Morphological Operations 形态学操作工具。
它支持 Erosion、Dilation、Opening、Closing 四种常见操作,用来进一步整理二值图结构。
1. 这次工具做什么?
主要功能包括:
- 上传 JPG / PNG 图片
- 自动使用 Otsu 二值化
- 支持 Erosion
- 支持 Dilation
- 支持 Opening
- 支持 Closing
- 调节 Kernel Size
- 调节 Iterations
- 显示处理前后结果
- 支持下载处理图
整体流程:
图片
→ 灰度化
→ Otsu 二值化
→ Morphology
→ 输出结果

2. 什么是形态学操作?
形态学操作主要针对:
二值图中的形状结构。
它不会像 Gamma 那样调整亮度,也不会像 CLAHE 那样增强对比度。
它主要做的是:
让白色区域变大、变小、去噪或者连接。
OpenCV 里通常需要先定义一个结构元素:
kernel = cv2.getStructuringElement( cv2.MORPH_RECT, (3, 3))
这次使用的是:
3 × 3 Rectangle Kernel
3. 四种操作分别是什么?
Erosion
腐蚀:
让白色区域收缩。
result = cv2.erode(binary, kernel)
常用于去掉小的白色区域。
Dilation
膨胀:
让白色区域扩大。
result = cv2.dilate(binary, kernel)
可以连接一些断裂区域。
Opening
开运算:
先腐蚀,再膨胀。
常用于:
去除小白噪点。
Closing
闭运算:
先膨胀,再腐蚀。
常用于:
填补小黑孔洞。
4. 这次为什么测试 Opening?
上一篇 Otsu 二值化以后,画面中仍然存在一些:
细小白点
碎片区域
不连续结构
所以这次选择:
Opening
参数为:
- Kernel Size:3 × 3
- Iterations:1
Opening 会先缩小白色区域,去掉较小碎片,再通过膨胀恢复主要结构。
5. 真实测试结果
这次继续使用狗狗公园图片。
图片尺寸:
1650 × 953
二值化方式:
Otsu Threshold
Otsu Threshold:
142.00
形态学参数:
- Operation:Opening
- Kernel Size:3 × 3
- Iterations:1
最终得到:
- Black Pixel Ratio:39.21%
- White Pixel Ratio:60.79%
6. 和原始 Otsu 结果相比
上一篇单独使用 Otsu 时:
- Black:37.87%
- White:62.13%
经过 Opening 后:
- Black:39.21%
- White:60.79%
可以看到:
白色区域从:
62.13%
下降到:
60.79%
减少了:
1.34 个百分点
说明部分较小的白色区域被 Opening 去掉了。
7. 为什么 Opening 会让白色减少?
Opening 的本质是:
Erosion + Dilation
第一步腐蚀:
先把白色区域收缩。
一些很小的白色噪点可能直接消失。
第二步膨胀:
再把剩下的大区域适当恢复。
但已经被完全去掉的小噪点不会重新出现。
所以最终效果通常是:
主要结构保留,小白点减少。
8. Kernel Size 有什么作用?
Kernel Size 决定每次操作影响多大的邻域。
这次使用:
3 × 3
属于比较温和的处理。
如果改成:
5 × 5
7 × 7
9 × 9
处理效果会越来越明显。
但 Kernel 太大,也可能导致:
细节丢失
小目标消失
结构变形
所以一般要根据目标大小来调整。
9. Iterations 又是什么?
Iterations 表示:
同一个形态学操作重复执行多少次。
这次:
Iterations = 1
如果设置成 2 或 3,
效果会进一步增强。
比如 Erosion 重复多次,会让白色区域越来越小。
Dilation 重复多次,则会让白色区域不断扩张。
所以 Iterations 也不能设置得太大。
10. 总结
这次用华为云码道辅助开发了一个:
OpenCV 形态学操作工具。
支持:
Erosion
Dilation
Opening
Closing
这次实际测试使用:
- Operation:Opening
- Kernel:3 × 3
- Iterations:1
- Otsu Threshold:142.00
处理后:
- Black Pixel Ratio:39.21%
- White Pixel Ratio:60.79%
相比原始 Otsu 结果,白色区域减少了 1.34 个百分点,说明 Opening 对部分细小白色噪点进行了清理。
这一篇可以简单理解成:
二值化负责把图片变成黑白,形态学负责把黑白结构整理得更干净。
下一篇可以继续做:
图片里的细小噪点怎么平滑?用华为云码道开发 OpenCV 图像滤波对比工具
直接比较 Gaussian Blur、Median Blur、Bilateral Filter 三种滤波效果。