OpenCV: возможно ли обнаружить движущийся объект?

Меня просят написать код, который может обнаружить ЛЮБОЙ движущийся объект, используя OpenCV. Будет использоваться во внешней системе. Но какой-нибудь движущийся объект? Насколько мне известно, он может обнаруживать заранее определенные объекты, такие как человек, автомобиль, мяч и т. Д. Я не уверен в этом Любой объект, потому что деревья также движутся по ветру, который бесполезен для системы, и если система собирается обнаруживать движущиеся ветви деревьев, движущиеся волны воды и тому подобные бесполезные вещи будут большой проблемой.

Итак, пожалуйста, дайте мне знать, есть ли какой-нибудь способ в opencv, где мы можем обнаружить все полезные движущиеся объекты, такие как люди, автомобили, фургоны, животные и т. Д., А также бесполезные вещи, такие как движущиеся ветви деревьев, движущиеся волны воды и т. Д.

Некоторые люди говорили мне, что "Распознавание паттернов" поможет, но у меня нет времени двигаться с ним, у меня всего 4 месяца, и я не математик. Во всяком случае, если это можно легко использовать с видео opencv, то я могу подумать об этом.

Пожалуйста помоги.

2 ответа

Решение

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

  • BackgroundSubtractorMOG
  • BackgroundSubtractorMOG2
  • FGDStatModel
  • MOG_GPU
  • MOG2_GPU VIBE_GPU <- перечислено под несвободной функциональностью
  • GMG_GPU

Существует демонстрационный исходный код bgfg_segm.cpp, расположенный в {opencv_folder}\samples\gpu. Демонстрация показывает использование и отображает выходные данные для классов сегментации (на графическом процессоре). Существует также похожая демонстрация для процессора, просто посмотрите. Классы на основе графического процессора предлагают производительность в режиме реального времени.

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

Нет, вам не нужно изобретать велосипед. В сети есть множество примеров обнаружения движущихся объектов, о которых вы можете узнать в движении.

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

Об обнаружении объектов, вы можете исправить регионы в соответствии с движением, и вы можете указать пороговое значение движения и можете захватывать объекты путем бинаризации

Другие вопросы по тегам