【问题标题】:How to assign specific IDs to specific contours in OpenCV python如何在 OpenCV python 中为特定轮廓分配特定 ID
【发布时间】:2021-09-13 13:07:43
【问题描述】:

我正在尝试识别棋盘上的方格并为它们分配一个 ID,该 ID 将是它们的方格编号,例如 a1、a2、h1、...h8。我在棋盘图像上应用了轮廓检测,并进行了一些预编辑,例如首先将其转换为灰度,然后进行精巧的边缘检测以及轮廓线。这是我得到的结果。 Image with contours detected.

我成功获得了所需的 64 个轮廓,但我无法为它们分配各自的 ID,如下所示: Chess Squares Notations 我尝试遍历轮廓,但每次的排列方式都不同。

如何为 64 个轮廓分配 ID(基本上是国际象棋的方格符号)?

【问题讨论】:

  • 计算每个轮廓的中心,并使用中心的(x, y)坐标进行排序。
  • 您还可以构建一个字典,将您的 ID 与方形质心进行映射。
  • @HansHirse 这样,我可以垂直或水平对它们进行排序,但不能在类似网格的系统中进行排序。如果我在轮廓中心的 x 坐标上进行操作,那么列(例如 - b1、b2、b3、b4 ...)是随机排列的,如果我在 y 坐标上进行操作,则会出现类似的问题。如何同时使用 x 和 y 进行排序。
  • 您可以使用 w.r.t. 的排序功能。两个变量!? In this answer,其实我之前已经实现过了。

标签: python opencv contour


【解决方案1】:

你可以做的是永远轮廓计算它的质心并给那个点一些 id ,现在当你遍历新的轮廓集时计算它们的质心。 现在您有 2 组质心,previous_ccurrent_c,您已经为每个 previous_c 分配了一个给定的 id,现在为该 previous_c 找到最接近的 current_c(您可以使用欧几里得距离或曼哈顿距离)并为其分配相同的 ID。所以基本上你是在做对象跟踪,但是是针对轮廓。

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2017-06-05
    • 1970-01-01
    • 2019-10-07
    • 2019-12-07
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多