在完成计算机视觉书籍的几章后,我决定应用这些方法为游戏创建一些原始机器人。我选择了几乎没有动力的Fling,我需要做的就是找到球。球可能有 5 种不同的颜色,也可以指向 4 个方向中的任何一个(取决于眼睛的位置)。我裁剪了场地中的每个方块,这样我就可以检查每个方块是否包含一个球。我的问题是我无法正确找到球。
我的第一次尝试是跟随。我对每个球的 RGB 颜色求和并得到 [R, G, B] 数组。然后我对字段中每个块的 RGB 颜色求和。如果块的数组具有与球的数组相似的 [R, G, B] 我建议这个块有一个球。问题是很难为“相似性”找到好的价值。甚至不同的空块在这样的总和上也有很大的不同。
其次,我尝试使用具有matchTemplate功能的openCV模块。此函数将图像与另一个源图像匹配,并且与minMaxLoc函数一起返回值maxLoc. 如果 maxLoc 接近 1,则图像可能在源图像中。我做了所有可能的球变化(总共20个),并在整个场地上传球。此功能运行良好,但不幸的是,它有时会错过球场上的一些球,或者为一个球分配两种不同类型的球(比如绿色和黄色)。我试图通过匹配球而不是整个场地而是每个街区来改进这个过程(这种方法的优点是它检查每个街区并且应该检测场地中正确数量的球,当与整个场地匹配时,每个场地只给出一个位置球的颜色。如果有两个相同颜色的球匹配模板丢失关于第 2 个球的信息)。令人惊讶的是,它仍然有误报\正数。
可能有更简单的方法来解决这个问题(也许是一个我还不知道的库),但现在我找不到。欢迎任何建议。