我正在尝试在冬季铃铛游戏中追踪兔子。这里有一些截图
起初,我认为我可以跟随只有兔子才有的颜色,但似乎所有对象(例如铃铛和鸽子)都具有相同的颜色。我可以通过搜索白色来检测所有对象(见结果)
但是我无法找到兔子。我需要使用opencv吗?我只使用了PIL模块来检测像素的颜色。这似乎是一个简单的任务,但我不知道该如何做。
我正在尝试在冬季铃铛游戏中追踪兔子。这里有一些截图
起初,我认为我可以跟随只有兔子才有的颜色,但似乎所有对象(例如铃铛和鸽子)都具有相同的颜色。我可以通过搜索白色来检测所有对象(见结果)
但是我无法找到兔子。我需要使用opencv吗?我只使用了PIL模块来检测像素的颜色。这似乎是一个简单的任务,但我不知道该如何做。
最简单的方法是仅根据面积对形状进行分类。这里是使用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。
现在,只需要过滤掉您不想要的斑点即可:
>>> 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()
我认为,你可以尝试使用SVM对兔子和铃进行分类。首先,你可以检测所有的对象,然后用SVM进行分类。