首页 > 解决方案 > 从棋盘图像创建数组

问题描述

基本上,我正在研究一个可以玩跳棋的机械臂。棋盘上方有一个摄像头,提供图片(甚至是视频资料,但我想这只是一系列图像,因为跳棋并不是真正的快节奏游戏,我可以每隔几秒钟拍一张照片,然后从那里开始)

我需要找到一种方法将可视板转换为例如 2d 数组以输入 AI 以计算机器人的移动。

我有一个线检测工作,它沿着正方形的边缘画线(并且还返回 canny 中的边缘作为前面的步骤)。此外,我检测到绿色和红色(我的棋盘的方块是绿色和红色)并将它们都作为掩码返回。

我还有一个球体检测来检测碎片的位置,一些黑白检测返回一个带有黑色或白色检测区域的掩码。

我的问题是我现在如何组合我拥有的这些东西,从而得到某种类型的数组,我可以从中推断出我的棋子在哪些方格中的信息?就像我将如何使用红/绿瓷砖的线条和/或蒙版将二维阵列(或将任何 8x8)阵列连接到电路板图像一样?我想我必须进行某种类型的校准?其次,有没有办法以某种方式覆盖面具,以便我知道哪些部分在哪些正方形中?

标签: pythonopencvcomputer-vision

解决方案


好吧,首先请记住,国际象棋总是从相同位置的相同棋子开始,例如黑马从 8-B 开始,在您的 2D 数组中可以是 [1][7]。如果我是你,我会从一个包含所有棋子开始位置的二维数组开始。

至于知道哪些碎片在哪里:您不需要识别碎片本身。如果我是你,我会做的是检测棋盘上的空白点,与真正识别不同的棋子相比,这实际上很容易。

一旦您的检测系统检测到以前空的位置之一现在不再是空的,您就知道棋子被移到了那里。由于您还可以检测到新的开放点(棋子来自的位置),因此您也知道被移动的确切棋子。如果您在整个游戏过程中跟踪此列表,您始终可以知道哪些棋子被移动,哪些棋子在哪里。

编辑:

如评论中所述,我的答案是基于国际象棋而不是跳棋。然而,这个想法仍然是相同的,但您现在可以将人和国王放在 2D 数组中,而不是棋子。


推荐阅读