如果屏幕上有快速移动的物体,如何找到图像?

问题描述 投票:0回答:1

我目前正在研究图像识别,我的目标是从手机游戏的棋盘上获取如下所示的所有信息: board

正如你所看到的,有 5 个不同的骰子,它们的等级可以在 1 到 7 之间。

我知道人工智能识别可以解决这个问题,但我认为这可能太多了。 我的另一个想法是平均制作 20 帧,这样射弹就会被擦除(不太确定)

例如,射弹可以如下所示: dice with projectiles

我想从董事会获取所有信息。 这将是一个 5*3 数组,每个位置都有骰子类型和级别

我尝试使用 pyautogui 在屏幕上查看骰子的每种可能出现的情况,但遇到了两个问题:

  • 检测时间:对于 1-2 个图像,速度相当快,但一旦我添加 14 个图像(因此每个级别有两个骰子),它就变得太慢了。
  • 射弹:骰子发射射弹越过它们,这些在早期骰子级别上并不是很烦人,因为它们的攻击速度很慢,并且我正确地检测到骰子类型和级别,但在更高级别上,它们发射得更快并且检测开始奋斗。

我在板的左上角位置做了所有测试:


def computeBoard():
  saw = False
  for dice in dicesList:
    try:
      if pyautogui.locateOnScreen(dice, region=(940, 580, 65, 65), confidence=0.90) is not None:
        print("I can see " + dice)
        saw = True
        break
    except pyautogui.ImageNotFoundException:
      pass
  if saw == False:
    print("I can't see any dice")

降低容差有助于检测,但程序将不同级别混淆在一起。

(dicesList 只是所有图像路径的列表)

我还选择了 python,因为我在 youtube 上看到的教程中使用了它,但如果需要,我可以毫无问题地切换。

我的问题有解决办法吗?

提前致谢:)

python image-recognition
1个回答
0
投票

我的另一个想法是平均制作 20 帧,这样射弹就会被擦除......

我的问题有解决办法吗?

是的,绝对可以,您可以轻松地“擦除”移动的物体。

但比起平均,更喜欢 中位数。 平均会留下微弱的投射物幽灵痕迹。 中位 OTOH 是一项稳健的统计数据,可以完全 丢弃此类异常值。

© www.soinside.com 2019 - 2024. All rights reserved.