Случай 1 - Если камера статическая
Если камера статическая, очень просто отследить одного человека.
Вы можете применить метод, который называется вычитанием фона,
Здесь, для получения лучших результатов, вам нужно изображение с камеры без людей.Это фон.(Это также можно сделать, даже если у вас нет этого фонового изображения. Но если оно у вас есть, лучше. В конце я скажу, что делать, если фонового изображения нет)
Теперь начните захват с камеры.Возьмите первый кадр, преобразуйте оба в оттенки серого, сгладьте оба изображения, чтобы избежать шума.
Вычтите фоновое изображение из кадра.
Если рамка не имеет изменений по сравнению с фоновым изображением (т.е. без человека), вы получите черное изображение (конечно, будет некоторый шум, мы можем его удалить).Если есть изменения, то есть человек вошел в кадр, вы получите изображение с человеком и фоном как черный.
Теперь пороговое значение для изображения для подходящего значения.
Применить некоторую эрозию, чтобы удалить мелкий зернистый шум.После этого примените расширение.
Теперь найдите контуры.Скорее всего, будет один контур, т.е. человек.
Найдите центроида или все, что вы хотите, чтобы этот человек отслеживал.
Теперь предположим, что у вас нет фонового изображения, вы можете найти его с помощью функции cvRunningAvg
.Он находит скользящее среднее количество кадров из вашего видео, которое вы используете для отслеживания.Но вы, очевидно, можете понять, что первый метод лучше, если вы получите фоновое изображение.
Вот реализация вышеописанного метода с использованием cvRunningAvg.
Случай 2- Камера не статична
Здесь вычитание фона не даст хорошего результата, поскольку вы не можете получить фиксированный фон.
Затем OpenCV поставляется с образцом для образца обнаружения людей.Используйте его.
Это файл: peopledetect.cpp
Я также рекомендую вам посетить этот SOF, который имеет дело почти с той же проблемой: Как я могуобнаруживать и отслеживать людей, использующих OpenCV?