gpt4 book ai didi

c++ - 使用 OpenCV 工具从连续的图像差异中检测国际象棋走法

转载 作者:可可西里 更新时间:2023-11-01 18:38:46 25 4
gpt4 key购买 nike

嘿,我正在编写一个简单的下国际象棋机器人的视觉系统,我正在尝试改进以前的一些研究,以允许使用相机和标准国际象棋,并且都允许在游戏过程中移动。到目前为止,我可以在通过网络摄像头获取的图像中找到棋盘,我想通过获取连续图像的差异来检测移动以确定发生了什么变化,然后使用有关棋盘占用的先前信息来检测移动。

我的问题是目前我似乎无法可靠地检测到变化,我当前的管道是这样的:两幅图像相减 -> 直方图均衡差值图像 -> 腐 eclipse 和扩张差异图像以去除微小变化 -> 制作二进制拷贝并进行距离变换 -> 获取最大的 blob(对应 DT 后的最大值,并对该 blob 进行洪水填充) -> 再次重复,直到 DT 返回一个小到足以忽略变化的值。

我正在用 OpenCV 和 C++ 编写所有这些代码。但是我的洪水填充似乎总是不填充 Blob ,因此大多数情况下我只检测到一个变化。我也尝试过使用 cv::inpaint 但这也没有帮助。所以我的问题是;我只是使用了错误的方法还是图灵可以使变化检测更可靠。如果是前者,人们能否建议替代路线,最好在合理的时间内使用 C++/Python 和/或 OpenCV 进行编码?

谢谢

最佳答案

固定棋盘和检测棋子移动的问题可以独立解决,假设一个人不移动棋盘同时也移动棋子..

关于我将如何处理它的一些想法:

检测板的方向

您必须能够处理原地旋转的棋盘,以及四处移动,只要保持一定的角度,让您可以看到棋子。如果板上有您可以轻松识别的东西(例如每个角上的标记),这会有所帮助,这样如果您失去方向(例如有人将板完全移离相机),您可以轻松地再次找到它。

为了跟踪电路板,您需要在 3D 空间中对相机相对于电路板的位置进行建模。这与确定围绕固定板移动的相机位置的问题相同。 Egomotion的一个问题.一旦你解决了这个问题,你就可以进入下一阶段,即检测运动和跟踪对象。

检测棋子的移动

这可能是问题中比较简单的部分。有很多算法可用于视频中的对象检测。我只想补充一点,您可以使用“关键”帧。我的意思是识别那些你只看到一步棋前后棋盘的帧。例如你看不到移动它的手遮挡了碎片等。一旦你有了前/后框架,你就可以弄清楚移动的是什么以及它相对于板的位置。

如果您假设连续性(即,您已经跟踪了棋盘初始排列以来的所有运动,这是众所周知的),您可能无法识别每个棋子的形状。

关于c++ - 使用 OpenCV 工具从连续的图像差异中检测国际象棋走法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com