12

Estoy usando OpenCV2.2 para implementar la detección de objetos en movimiento con el método de Resta de fondo. Y utilizo el método del Modelo de Mezcla Gaussiana (GMM) para modelar la imagen de referencia de fondo.Cómo usar cv :: BackgroundSubtractorMOG en OpenCV?

Obtengo directamente los píxeles de primer plano (o máscara de primer plano) utilizando la clase cv :: BackgroundSubtractorMOG proporcionada en OpenCV2.2. Es conveniente, pero la máscara de primer plano devuelta por cv :: BackgroundSubtractorMOG no es tan buena como esperaba. Además, parece que cv :: BackgroundSubtractorMOG funciona peor que el método de GMM escrito en lenguaje C proporcionado en OpenCV1.0.

La siguiente es mi código en OpenCV2.2:

cv::BackgroundSubtractorMOG mog; 
mog(frame, fgMask, 0.01); 

Así, usé el método de una manera incorrecta?

Por cierto, ¿cv :: BackgroundSubtractorMOG realiza la eliminación de sombras en los píxeles de primer plano?

Muchas gracias.

+0

Aquí hay una visión general útil, a partir de 3.0 documentos, del uso de las funciones de resta de fondo de OpenCV: http://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html – Pierz

Respuesta

12

Cuando crea mog, no está definiendo ningún parámetro, por lo que se crea con los parámetros predeterminados. Here tiene una descripción de cada parámetro, tal vez es solo eso. Pruebe con 3, 4 5 gaussianos.

Esta función no realiza la eliminación de sombras pero tiene this otra función que sí lo hace. ¡Buena suerte!

1

respuesta de F.X. en this thread da parámetros de la muestra de

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8); 
+0

pero eso está funcionando muy lentamente en mi aplicación. Estoy buscando buenos parámetros – austin

5

Hay algoritmos que eliminan los últimos fondos (detectar en primer plano) mucho mejor que la implementación estándar GMM en OpenCV.

Por ejemplo, hay un enfoque de cascada clasificador basado en bloques descrito en this journal article, junto con su source code basado en C++.

+0

¿Cómo debería ser la estructura del directorio de entrada para usar esta herramienta? Parece segfault en readdir() sin importar lo que le arroje. – RussellStewart

0

Recomendaré utilizar la siguiente configuración para comenzar. A continuación, puede empezar a afinar sus parámetros:

cv::BackgroundSubtractorMOG2 mog; 
mog(rawFrame,foregroundFrame,-1); 
mog.set("nmixtures", 3); 
mog.set("detectShadows",1); 

En este ejemplo me puse el restador MOG2 con 3 mezclas de gaussianas. También habilité la detección de sombras.

Cuestiones relacionadas