【发布时间】: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,其实我之前已经实现过了。