Opencv обнаружение движения с отслеживанием - PullRequest
6 голосов
/ 11 августа 2011

Мне нужно надежное обнаружение и отслеживание движения в видеокадрах веб-камеры. Фон всегда один и тот же. Цель состоит в том, чтобы определить положение объекта, по возможности, без теней, но не так срочно, чтобы удалять тени. Я пробовал алгоритм opencv для вычитания фона и определения пороговых значений, но это зависит только от одного изображения в качестве фона, что, если фон немного меняется в яркости (или автофокусировка камеры), мне нужен алгоритм небольшие изменения в виде яркости или тени.

Ответы [ 3 ]

3 голосов
/ 13 октября 2011

Когда вы пробуете пороговое значение в OpenCV, вы делаете это с цветовыми форматами RGB (красный, зеленый, синий) или HSV (оттенок, насыщенность, значение)?Исходя из личного опыта, я считаю, что кодирование HSV намного лучше для отслеживания цветных объектов в видеоматериале при использовании вместе с OpenCV для определения порога и cvBlobsLib для определения местоположения BLOB-объекта.

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

I пороговое значение эталонного изображения HSV («imgHSV») для получения двоичного (черного иwhite) изображение с использованием вызова cvInRange () API OpenCV:

cvInRangeS( imgHSV,  
            cvScalar( 104, 178, 70  ),  
            cvScalar( 130, 240, 124 ),  
            imgThresh ); 

В приведенном выше примере два параметра cvScalar представляют собой нижнюю и верхнюю границы значений HSV, представляющих оттенки синеватого цвета.В моих собственных экспериментах я смог получить некоторые подходящие максимальные / минимальные значения, сделав снимки экрана с объектами, которые я интересовал, отслеживая и наблюдая типы возникающих значений оттенка / насыщенности / яркости.

Подробнееподробные описания с примером кода можно найти в этом блоге .

3 голосов
/ 12 августа 2011

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

Сначала многоиз них предполагается постоянство яркости (поэтому то, что вы просите, трудно достичь).Например:

  • Lucas-Kanade
  • Horn-Schunk
  • Сопоставление блоков

широко используется для отслеживания, но предполагает яркостьпостоянство.

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

Я позже напишу об этом, Жюльен,

1 голос
/ 22 ноября 2016

У Андриана есть классный урок http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

Я следовал и прошел хороший экспериментальный тест https://youtu.be/HJBOOZVefXA

Я также использую статическое изображение

frameDelta = cv2.absdiff(firstFrame, gray)
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations=2)
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

4 строки кода найти движение хорошо удачи

...