Обнаружение движения Opencv с отслеживанием

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


person maximus    schedule 11.08.2011    source источник


Ответы (3)


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

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

  • Лукас-Канаде
  • Horn-Schunk
  • Сопоставление блоков

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

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

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

person jmartel    schedule 12.08.2011

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

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

Я определяю эталонное изображение HSV ('imgHSV'), чтобы получить двоичное (черно-белое) изображение, используя вызов API cvInRange() OpenCV:

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

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

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

person AndyUK    schedule 13.10.2011

У Андриана есть отличный учебник 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-строчный код найди движение ну удачи

person pham ngoc tuan    schedule 22.11.2016