【发布时间】:2016-07-30 23:53:46
【问题描述】:
在完成计算机视觉书籍的几章后,我决定应用这些方法为游戏创建一些原始机器人。我选择了几乎没有动态的Fling,我需要做的就是找到球。球可能有 5 种不同的颜色,也可以指向 4 个方向中的任何一个(取决于眼睛的位置)。我裁剪了场地中的每个方块,这样我就可以检查每个方块是否包含球。我的问题是我无法正确找到球。
我的第一次尝试是跟随。我对每个球的 RGB 颜色求和并得到 [R, G, B] 数组。然后我对字段中每个块的 RGB 颜色求和。如果块的数组与球的数组有相似的 [R, G, B] 我建议这个块有一个球。 问题是很难为“相似性”找到好的价值。甚至不同的空块在这样的总和上也有很大的不同。
其次,我尝试使用具有matchTemplate功能的openCV模块。此函数将图像与另一个源图像匹配,并与 minMaxLoc 函数一起返回一个值 maxLoc。如果 maxLoc 接近 1,则图像可能在源图像中。我做了所有可能的球变化(总共20个),并在整个场地上传球。此功能运行良好,但不幸的是,它有时会错过球场上的一些球,或者为一个球分配两种不同类型的球(比如绿色和黄色)。我试图通过匹配球而不是整个场地而是每个街区来改进这个过程(这种方法的优点是它检查每个街区并且应该检测场地中正确数量的球,当与整个场地匹配时,每个场地只给出一个位置球的颜色。如果有两个相同颜色的球匹配模板丢失关于第 2 个球的信息)。令人惊讶的是,它仍然有误报\正数。
可能有更简单的方法来解决这个问题(也许是一个我还不知道的库),但现在我找不到。欢迎任何建议。
【问题讨论】:
-
你有完全匹配的背景(绿场)?
-
我认为您可能会通过引入外部计算机视觉库来过度复杂化。为了区分球和非球,我会更多地尝试特定任务的像素旋转。除了平均颜色通道值之外,我认为考虑过渡的清晰度会很有用(例如,草到球和球到眼睛应该很容易检测到)。一旦你确定你有一个球,通过在中心采样像素(并与已知的球颜色进行比较),应该很容易找到球的颜色。
-
就特定任务的像素旋转而言,因为您可以生成“所有可能的球变体”,并且可以对图块进行像素完美对齐(球似乎总是在当你要移动时,我认为只是比较像素的百分比几乎等于参考图片中对齐的像素的百分比会让你走得很远。 (数字太小了,我预计性能在这里不太可能成为问题,即使是一个相当幼稚的解决方案。)
-
@IanMedeiros 你是说没有球的场地?
-
@svk 什么是特定于任务的像素旋转?以及如何找到过渡?
标签: python opencv computer-vision bots