python - 从棋盘图像创建数组

标签 python opencv computer-vision

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

我需要找到一种方法将可视板转换为例如二维数组以馈入人工智能以计算机器人的移动。

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

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

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

最佳答案

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

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

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

编辑:

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

关于python - 从棋盘图像创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087263/

相关文章:

python - matplotlib 中带有颜色的 3d 散点图

python - 准确解析antlr4中的n个参数

python - 通过 systemd 服务启动 flask

opengl - cvQueryFrame函数调用使用OpenCV和OpenGL减慢主循环执行

python - conda与caffe一起安装openCV 3.4.2,但不能单独删除

opencv - Canny Edge 的自适应参数

python - 在 pandas DataFrame 的每一列中找到第一个非零值

qt - QMake:如何选择要链接到的库版本

computer-vision - 如何实现4维卷积核

python - 如何在python中使用opencv从IP摄像机访问视频流?