二值图里的噪点怎么去掉?用华为云码道开发 OpenCV 形态学操作工具

前面已经做过 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 三种滤波效果。

相关推荐
寂寞的船5 分钟前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
彭祥.14 分钟前
Jetson边缘计算实现 红外测温+可见光AI识别系统
人工智能·边缘计算
明王明王1 小时前
从零搭建一个 AI Infra 实验室㉑:llm-d——从单个 vLLM 走向分布式推理
人工智能·ai infra
武子康1 小时前
图片删了,为什么旧链接还能打开、后台还能生成回来?
人工智能·agent
yuanyuan3341 小时前
2026枣庄带检测报告伸缩门品牌测评|本地服务
大数据·数据库·人工智能·伸缩门
无所畏俱的老尹2 小时前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
会飞锦鲤2 小时前
基于 SVM + HOG 的铸造缺陷检测系统
python·opencv·机器学习·计算机视觉·缺陷检测·图像分类·svm
神鹰手哥_起飞版3 小时前
深度研判任务里,开思考、换更强的模型、套方法论,哪个更有用?
人工智能
ObserverX213 小时前
我是如何用 13KB 纯 Python,发现本地 RAG 的“隐式递归记忆”的
人工智能
Jason_gao9993 小时前
Github Copilot 新手极速上手指南
人工智能·github·copilot