二值图里的噪点怎么去掉?用华为云码道开发 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 三种滤波效果。

相关推荐
今年下半年1 小时前
AI智能体项目实战记录(05):RAG项目实战之向量知识库milvus部署
人工智能·llm·milvus·rag
haluhalu.1 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
fpcc1 小时前
AI和大模型—矩阵相似
人工智能·线性代数·矩阵
data analyse 4561 小时前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
DongQiShanRen1 小时前
六根硬件映射(下):物理闭环五步法,抽一条已实装的看
大数据·jvm·人工智能·算法·rust·哈希算法·集成学习
鸿翼Macrowing1 小时前
鸿翼入选 2026 年上海市 “AI + 制造” 服务商能力图谱
人工智能·制造·opencontent ai·ai+制造
墨子夕1 小时前
创新的潮汐——从科学发现到资本周期的百年规律(第三卷)
人工智能·其他·周期
尘一不染1 小时前
多模型 API 接入实战(一):从一次 HTTP 请求到可维护的适配层
网络·人工智能·网络协议·http
szxinmai主板定制专家1 小时前
ZYNQ PL+PS 架构拆解|工业自动化与电力物联网高速数据采集、预处理与协议上云
arm开发·人工智能·物联网·fpga开发·数据采集卡·rk3576