5

Necesito una detección de movimiento robusta y seguimiento en marcos de video de la cámara web. El fondo es siempre el mismo. El objetivo es identificar la posición del objeto, si es posible sin las sombras, pero no tan urgente para eliminar las sombras. He probado el algoritmo opencv para la resta de fondo y el umbral, pero esto depende de una sola imagen como fondo, y si el fondo cambia un poco en brillo (o enfoque automático de la cámara), necesito que el algoritmo sea fuerte para pequeños cambios como brillo o algunas sombras.Detección de movimiento Opencv con seguimiento

Respuesta

3

El método robusto para rastrear son parte de amplios intereses de investigación que se están desarrollando en todo el mundo ... Aquí hay algunas claves para resolver su problema que es muy interesante pero amplio y abierto.

En primer lugar, muchos asumen la constancia del brillo (por lo tanto, lo que usted pregunta es difícil de lograr). Por ejemplo:

  • Lucas-Kanade
  • Horn-Schunk
  • bloque de coincidencia de

es ampliamente utilizado para el seguimiento, pero asume la constancia de brillo.

Luego otros interesantes podrían ser meanshift o el seguimiento camshift, pero se necesita una proyección de seguir ... Sin embargo, puede utilizar una copia de proyección calculada de acuerdo a cierto umbral para satisfacer sus necesidades de robustez ...

voy a publicar más adelante de eso, Julien, formatos

3

al intentar el umbral de OpenCV haces esto con RGB (rojo, verde, azul) o HSV (matiz, saturación, valor) de color? Por experiencia personal, considero que la codificación HSV es muy superior para rastrear objetos coloreados en secuencias de video cuando se utiliza junto con OpenCV para el umbral y cvBlobsLib para identificar la ubicación del blob.

HSV es más fácil ya que HSV tiene la ventaja de tener que usar un solo número para detectar el color ("hue"), a pesar de la probabilidad muy real de que haya varios tonos de ese color, que van desde la luz hasta tonos más oscuros. (La cantidad de color y el brillo del color se controlan mediante los parámetros de "saturación" y "valor", respectivamente).

umbral I la imagen de referencia HSV ('imgHSV') para obtener una imagen binaria (blanco y negro) usando una llamada a la cvInRange() OpenCV API:

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

En el ejemplo anterior, los dos Los parámetros de cvScalar son los límites inferior y superior de los valores de HSV que representan los tonos de color azulado. En mis propios experimentos, pude obtener algunos valores máximos/mínimos adecuados capturando capturas de pantalla del objeto (s) que me interesaba rastrear y observar los tipos de valores de matiz/saturación/lum que se producen.

Descripciones más detalladas con una muestra de código se pueden encontrar en este blog posting.

1

Andrian tiene un tutorial fresco http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

me siguieron y tienen una buena prueba experimento https://youtu.be/HJBOOZVefXA

utilizo imagen estática, así

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 líneas de código hallazgo de movimiento así buena suerte