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


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

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