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

我用ov5640相机(mipi)使用Nitrogen6x板。

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

gst-launch mfw_v4lsrc ! autovideosink

我想通过GStreamer(OpenCV内部的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")
链接地址: http://www.djcxy.com/p/25419.html

上一篇: Using custom camera in OpenCV (via GStreamer)

下一篇: Autocompletion of AspectJ not working in eclipse with spring roo 2 project