2011-01-14 11 views
7

Estoy tratando de que OpenCV procese un fotograma en el medio de una tubería gstreamer.Agregue un poco de procesamiento de OpenCV a una secuencia de video gstreamer

tengo la generación de una tubería GStreamer la corriente, enviándolo a appsink para el código OpenCV para recibir:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

Y otro tubo de obtenerlo de appsrc (a la que OpenCV envía datos) y la salida en la pantalla :

appsrc name=src ! jpegdec ! xvimagesink 

abro cada cuadro con una solicitud de tampón de extracción en fregadero y procesarla con OpenCV, a continuación, utilizar push-tampón en src. Estoy haciendo todo eso en Python.

Por alguna razón, eso no parece funcionar (falla de segmentación).

Pero realmente no estoy tratando de arreglarlo; es terriblemente ineficiente de todos modos. Me pregunto si hay alguna forma mejor de que OpenCV procese el marco antes de que llegue a un receptor de salida.

+2

Dado que desea más de lo que puede ofrecer gst-opencv, si no le importa escribir su lógica en C (o C++), ¿quizás debería intentar escribirlo como un complemento para gst? Puede tomar una de las fuentes de los complementos de gst-opencv como punto de partida – sinelaw

+1

. Otra cosa: su ejemplo parece basarse en v4l2, y creo que la API HighGui de opencv ya lo admite (o al menos v4l sin el '2'). esa sería la solución más fácil si realmente no necesitas gstreamer. – sinelaw

+0

1. Buena sugerencia, podría hacer eso. 2. Tiene razón, podría usar HighGUI en este caso, pero v4l2src se usó simplemente como un ejemplo. En la aplicación real pretendo obtener la transmisión de video desde una fuente de tcp, así que realmente no puedo implementar todo en OpenCV. – SMiLE

Respuesta

2

¿Has probado gst-opencv? Suministra varias primitivas de opencv como complementos gstreamer.

EDIT: Parece que se ha fusionado en gst-plugins-bad, y el enlace de arriba no está actualizado.

+0

Gracias por su respuesta. Consideré gst-opencv pero decidí no hacerlo porque quiero la libertad de procesar los cuadros de video de la manera que quiera (por ejemplo, aplicar algoritmos de aprendizaje automático específicos del dominio), y las opciones que ofrece gst-opencv son muy genéricas. – SMiLE

1

Sé que han pasado algunos años desde su pregunta original, pero solo para el registro, OpenCv puede abrir las tuberías de Gstreamer directamente. Consulte la (auto) respuesta en Using custom camera in OpenCV (via GStreamer) para ver un ejemplo.

Y, dicho sea de paso, OpenCv 3.0 (rama principal) realmente integra el soporte de gstreamer 1.0.

Cuestiones relacionadas