【问题标题】:How do I locate the rabbit?如何找到兔子?
【发布时间】:2012-12-11 19:07:02
【问题描述】:

我正在尝试在游戏 Winterbells 中跟随兔子。下面是一些截图

本来我以为我可以追随只有兔子才有的颜色,但似乎所有的物体(即铃铛和鸽子)都有相同的颜色。我可以通过搜索白色来检测所有对象(查看结果)

但我不知道如何找到兔子。我必须使用opencv吗?我使用的唯一模块是 pil 来检测像素的颜色。这似乎是一项简单的任务,但我就是不知道该怎么做。

【问题讨论】:

  • 使用 SimpleCV。使用起来会容易得多。我只是使用斑点检测来找到白色斑点。
  • 我会检查 simplecv,但即使有斑点检测,我如何区分兔子和铃铛?

标签: python opencv python-imaging-library object-detection


【解决方案1】:

最简单的方法是按区域对形状进行分类。这是 SimpleCV 的一种解决方案:

>>> from SimpleCV import *
>>> image = Image('image.png')
>>> binarized = image.binarize(220).invert()
>>> binarized.show()

现在,这更容易使用。您可以使用简单的斑点检测来过滤掉铃铛和鸟儿:

>>> blobs = binarized.findBlobs()
>>> for blob in blobs:
...    blob.draw()
...    print blob
...    binarized.show()
...    raw_input()

Enter 50 次并查看斑点的面积后,您会注意到铃铛的面积在 630 到 660 之间。鸟的面积为 540,兔子的面积为面积约750。

现在,只需过滤掉不需要的 blob:

>>> rabbit = next(b for b in blobs if abs(750 - b.area()) < 60)
>>> rabbit.draw()
>>> binarized.show()
>>> rabbit
    SimpleCV.Features.Blob.Blob object at (381, 445) with area 754

你的兔子来了。

所以总结一下,你的脚本应该是这样的:

from SimpleCV import *

image = Image('image.png')
binarized = image.binarize(220).invert()
blobs = binarized.findBlobs()
rabbit = next(b for b in blobs if abs(750 - b.area()) < 60)

print rabbit.coordinates()

【讨论】:

    【解决方案2】:

    我想,你可以尝试使用 svm 对兔子和铃铛进行分类。首先,可以检测所有对象,然后用 svm 对它们进行分类。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 2022-06-28
      • 2012-12-17
      • 2013-02-24
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多