c++ c opencv camera gstreamer

c++ - Usar una cámara personalizada en OpenCV(a través de GStreamer)



camera (2)

Estoy usando la placa Nitrogen6x con la cámara ov5640 (mipi).

La cámara no está usando v4l / v4l estándar, pero podemos transmitir video usando GStreamer para su controlador (mfw_v4l):

gst-launch mfw_v4lsrc ! autovideosink

Quiero usar la cámara en OpenCV llamándola a través de GStreamer (GStreamer dentro de OpenCV). Hice una pregunta acerca de llamar a GStreamer dentro de OpenCV aquí , y este es el seguimiento.

Si habilito el soporte de GStreamer, se verifica en el código fuente , pero OpenCV intenta usar el estándar V4L / V4L2 para GStreamer que quiero cambiar. La sección sobre llamar a GStreamer está en cap_gstreamer.cpp :

CvCapture* cvCreateCapture_GStreamer(int type, const char* filename ) { CvCapture_GStreamer* capture = new CvCapture_GStreamer; if( capture->open( type, filename )) return capture; delete capture; return 0; }

Supongo que esta es la sección en la que debería trabajar para señalar de alguna manera el controlador de la cámara. ("tipo" aquí probablemente sea un número relacionado con el controlador (como se define en precomp.hpp), pero ¿cuál es el "nombre de archivo"?)

Cualquier sugerencia sobre cómo acceder a la cámara a través de GStreamer sería útil y apreciada. ¡Gracias!


Parece que podemos llamar a la cámara usando una tubería adecuada GStreamer como a continuación:

VideoCapture cap("mfw_v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb ! appsink")

como la salida de la cámara está en YUV, necesitamos convertir eso a RGB para pasar los marcos a OpenCV. Aquí es donde OpenCV se asegura de que tenga espacio de color RGB.


Solo como referencia, esto funciona en OpenCV 3.0:

VideoCapture cap("souphttpsrc location=http://root:[email protected]:80/mjpg/video.mjpg ! decodebin ! videoconvert ! appsink")