You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取黑白图中黑线间的Sprite/Texture区域并实现数字填色

问题描述

我正尝试读取黑白图片中黑线之间的填充区域,不确定当前方法是否高效,想要实现数字填色效果:为所有区域添加编号,并与原始彩色图片的颜色匹配。

参考图片:
黑白分割图
原始彩色原图
目标编号效果

高效实现方案

1. 快速区域分割(基于黑白图)

  • 先对黑白图做二值化处理:用OpenCV的cv2.threshold()把黑线设为背景(黑色),填充区域设为前景(白色),也可以直接反转黑白图让填充区域变成黑色方便后续分析。
  • 用连通区域分析识别独立区域:调用cv2.connectedComponentsWithStats(),这个函数能一次性返回所有独立区域的编号、边界框、面积等信息,是目前最高效的区域识别方式,完全不需要手动遍历像素。
    • 注意:如果黑线有细微断点,可以先做一次形态学闭运算(cv2.morphologyEx())补全黑线,避免区域被错误合并。

2. 精准颜色匹配(对应彩色图)

  • 对每个连通区域,取其中心坐标的像素颜色:通过区域的边界框计算中心位置,直接从彩色图中提取该点的RGB值,这种方式速度最快。
  • 如果区域内颜色有渐变,可以取区域内所有像素的颜色平均值:用Numpy的切片操作批量提取区域像素,再求均值,比循环单个像素效率高很多。

3. 编号绘制与输出

  • 在每个区域的中心位置绘制编号:用cv2.putText()设置合适的字体大小和颜色(建议用黑色或白色,和区域颜色反差大的),确保编号清晰可见。
  • 最终可以生成编号图,同时建立“编号-颜色”的映射表,方便后续填色验证。

核心优化建议

  • 全程用OpenCV+Numpy的向量运算,避免Python循环遍历像素,这是提升效率的关键。
  • 连通区域分析时,通过面积过滤掉极小的杂点区域,减少无效编号的生成。

内容的提问来源于stack exchange,提问作者sertacdncl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:10:31