2014-05-09 16 views
8

Ich benutze Nitrogen6x Board mit ov5640 Kamera (Mipi).Verwendung einer benutzerdefinierten Kamera in OpenCV (über GStreamer)

Die Kamera Standard verwendet nicht v4l/v4l, aber wir können für die Fahrer (mfw_v4l) Video mit GStreamer streamen: durch den Aufruf es über GStreamer (GStreamer

gst-launch mfw_v4lsrc ! autovideosink 

Ich möchte verwenden, um die Kamera in OpenCV in OpenCV). Ich habe eine Frage über den Aufruf von GStreamer in OpenCV here gestellt, und dies ist das Follow-up.

Wenn ich die GStreamer-Unterstützung aktiviere, wird in the source code geprüft, aber OpenCV versucht, den Standard V4L/V4L2 für GStreamer zu verwenden, den ich ändern möchte. Der Abschnitt über GStreamer Aufruf ist in 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; 
} 

Ich denke, das ist der Abschnitt I irgendwie arbeiten sollte, um die Fahrer Kamera zeigen. ("Typ" hier ist wahrscheinlich eine Zahl mit dem Treiber (wie in precomp.hpp definiert), aber was ist der "Dateiname"?)

Alle Vorschläge über den Zugriff auf die Kamera über GStreamer wäre hilfreich und geschätzt. Danke!

Antwort

5

Sieht aus wie wir die Kamera mit einem richtigen GStreamer-Pipeline wie unten anrufen:

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

als die Kameraausgabe in YUV ist, müssen wir feststellen, dass in RGB konvertieren die Rahmen zu OpenCV passieren. This ist, wo OpenCV dafür sorgt, dass es RGB-Farbraum bekommt.

+0

In der Version von OpenCV das funktioniert? –

+0

funktioniert nicht vor opencv v3 –

0

Gerade als Referenz, das funktioniert in OpenCV 3.0:

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