Как мне найти кролика?



Я пытаюсь следовать за кроликом в игре winterbells. Вот несколько скриншотовкроликкроликкролик



Первоначально я думал, что могу следовать цвету, который был только у кролика, но, похоже, что все объекты (например, колокольчики и голубь) имеют одни и те же цвета. Я могу обнаружить все объекты, просто ища белый цвет (см. результаты) результаты

Но я не могу понять, как найти кролика. Придется ли мне использовать opencv? Единственный модуль, который я использовал, - это pil для обнаружения цветов пикселы. Это кажется легкой задачей, но я просто не вижу, как я могу это сделать.
697   2  

2 ответов:

Самым простым способом было бы просто классифицировать фигуры по площади. Вот одно решение с SimpleCV:

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

Введите описание изображения здесь

Теперь с этим гораздо проще работать. Вы можете использовать простое обнаружение blob, чтобы отфильтровать колокольчики и птицу:
>>> 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.

Comments

    Ничего не найдено.