在OpenCV中使用自定义相机(通过GStreamer)



我使用的是带有ov5640相机(mipi)的Nitrogen6x板。

相机不使用标准的v4l/v4l,但我们可以使用GStreamer作为其驱动程序(mfw_v4l):

gst-launch mfw_v4lsrc ! autovideosink

我想使用相机在OpenCV通过调用它通过GStreamer (GStreamer在OpenCV)。我问了一个关于在OpenCV中调用GStreamer的问题,这是后续的。

如果我启用GStreamer支持,它在源代码中检查,但OpenCV试图使用标准V4L/V4L2的GStreamer,我想改变。关于调用GStreamer的部分在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;
}

我想这是我应该做的部分,以某种方式指向相机的驱动程序。(这里的"type"可能是一个与驱动程序相关的数字(在precomp.hpp中定义),但"filename"是什么?)

关于如何通过GStreamer访问相机的任何建议将是有帮助的和赞赏的。谢谢!

看起来我们可以像下面这样使用合适的GStreamer管道来调用相机:

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

因为相机输出是YUV,我们需要将其转换为RGB以将帧传递给OpenCV。这是OpenCV确保它得到RGB色彩空间的地方。

仅供参考,这适用于OpenCV 3.0:

VideoCapture cap("souphttpsrc location=http://root:admin@192.168.5.123:80/mjpg/video.mjpg ! decodebin ! videoconvert ! appsink")

最新更新