【问题标题】:Using custom camera in OpenCV (via GStreamer)在 OpenCV 中使用自定义相机(通过 GStreamer)
【发布时间】:2014-06-27 13:05:25
【问题描述】:

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

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

gst-launch mfw_v4lsrc ! autovideosink

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

如果我启用 GStreamer 支持,它会检查 in the source code,但 OpenCV 会尝试对我想要更改的 GStreamer 使用标准 V4L/V4L2。 关于调用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;
}

我想这是我应该研究的部分,以某种方式指向相机的驱动程序。 (这里的“类型”可能是与驱动程序相关的数字(定义在 precomp.hpp 中),但“文件名”是什么?)

任何有关如何通过 GStreamer 访问相机的建议都会有所帮助和赞赏。 谢谢!

【问题讨论】:

    标签: c++ c opencv camera gstreamer


    【解决方案1】:

    看起来我们可以使用适当的 GStreamer 管道调用相机,如下所示:

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

    由于相机输出是 YUV,我们需要将其转换为 RGB 以将帧传递给 OpenCV。 This 是 OpenCV 确保它获得 RGB 颜色空间的地方。

    【讨论】:

    • 我使用的是 OpenCV 2.4,是否需要使用相同的 gstreamer 管道?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2017-08-05
      • 2014-06-23
      相关资源
      最近更新 更多