我如何找到兔子?

bab*_*bab 3 python opencv object-detection python-imaging-library

我试图在游戏winterbells中跟随兔子.这是一些截图兔子兔子兔子

最初我以为我可以按照只有兔子的颜色,但似乎所有的物体(即铃铛和鸽子)都有相同的颜色.我可以通过搜索白色来检测所有对象(参见结果)结果

但我无法弄清楚如何找到兔子.我必须使用opencv吗?我用过的唯一模块就是检测像素的颜色.这似乎是一项简单的任务,但我不知道如何做到这一点.

Ble*_*der 14

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

>>> from SimpleCV import *
>>> image = Image('image.png')
>>> binarized = image.binarize(220).invert()
>>> binarized.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

>>> blobs = binarized.findBlobs()
>>> for blob in blobs:
...    blob.draw()
...    print blob
...    binarized.show()
...    raw_input()
Run Code Online (Sandbox Code Playgroud)

按下Enter50次并观察斑点的区域后,您会注意到铃声的面积在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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有你的兔子.

所以为了包装起来,你的脚本看起来像:

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()
Run Code Online (Sandbox Code Playgroud)