如何定位兔子?(这是一个关于IT技术的问题标题)

3

我正在尝试在冬季铃铛游戏中追踪兔子。这里有一些截图rabbitrabbitrabbit

起初,我认为我可以跟随只有兔子才有的颜色,但似乎所有对象(例如铃铛和鸽子)都具有相同的颜色。我可以通过搜索白色来检测所有对象(见结果)results

但是我无法找到兔子。我需要使用opencv吗?我只使用了PIL模块来检测像素的颜色。这似乎是一个简单的任务,但我不知道该如何做。


使用SimpleCV会更容易操作。我只需使用blob检测来查找白色斑点。 - Blender
我会试试SimpleCV,但即使使用斑点检测,我怎么区分兔子和铃铛呢? - bab
2个回答

14

最简单的方法是仅根据面积对形状进行分类。这里是使用SimpleCV的一种解决方案:

>>> from SimpleCV import *
>>> image = Image('image.png')
>>> binarized = image.binarize(220).invert()
>>> binarized.show()
现在,这要容易处理多了。您可以使用简单的斑点检测来过滤掉钟和鸟:

enter image description here

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

按下 Enter 键50次并查看斑点的面积后,您会注意到钟形花有630到660之间的面积。鸟的面积为540,兔子的面积约为750。

现在,只需要过滤掉您不想要的斑点即可:

>>> 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()

0

我认为,你可以尝试使用SVM对兔子和铃进行分类。首先,你可以检测所有的对象,然后用SVM进行分类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接