【问题标题】:How to isolate the bars with cv2?如何用cv2隔离酒吧?
【发布时间】:2021-11-16 20:44:29
【问题描述】:

如何隔离没有白色填充的条形,在下图中代表条形图的图像中?

我正在寻找一种适用于该图像的任何变体的解决方案。您可以假设格式相同,但某些特征(如网格线/轴线中的间隙)可能位于不同的位置。

我尝试检测条形的各种特征,例如条形的 26x3px 末端,或左上角和右下角。例如,对左上角使用如下掩码:

bar_top_kernel: Numpy = np.array([
    [1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 0, 0, 0, 0, 0, 0, 0],
], dtype='uint8')

bar_top_kernel: Numpy = np.array([
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    [0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
], dtype='uint8')

但根据我的尝试,我会因为条形的末端与网格线的交互方式而错过角点或误报。

我已尝试先删除网格线。但是由于条形末端和网格线的相互作用,我倾向于留下干扰特征检测的碎片。

我开始认为如果没有某种 ML 方法,这可能是不可能的,但我希望有人能发现一个聪明的技巧来实现这一点。

(请点击查看完整尺寸)

【问题讨论】:

  • 请提供源数据。这看起来像一个阈值版本。
  • 你是对的,但我的消息来源无济于事。条形和背景颜色完全相同,条形轮廓和网格线颜色也相同。来源基本上是这张图片的反面+我已经删除的各种颜色的注释。(但是我不能提供来源,抱歉)。

标签: python opencv feature-detection


【解决方案1】:

我最终想出了一个简单的技巧:

  1. 反转颜色。
  2. 查找并填充任何轮廓:边界框宽度 > 条形宽度。这基本上隔离了酒吧。
  3. 再次查找轮廓并找到质心靠近的轮廓对。这会给出条形小条,它们被刻度线一分为二。
  4. 填充包围每一对的矩形以修复分裂。

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2022-09-27
    • 2018-11-21
    • 2011-07-30
    相关资源
    最近更新 更多