如何结合gstreamer和opencv?

Posted

技术标签:

【中文标题】如何结合gstreamer和opencv?【英文标题】:how combine gstreamer and opencv? 【发布时间】:2012-09-08 22:17:08 【问题描述】:

我想使用 OpenCV 分析以 1280 x 960 的原始分辨率拍摄的网络摄像头的(部分)帧。我可以使用 Gstreamer 和 appsink 捕获这些帧。然而,我开始意识到,仅仅导入 OpenCV 就会弄乱 Gstreamer,因此我的捕获不再起作用。 我需要 gstreamer,因为 OpenCV 只允许捕获 640x480,而且我开始喜欢它带来的所有额外功能。

我能想到的最简单的例子来说明我的问题是这样的:

    import gst
    from time import sleep

    #import cv2

    pipeline = gst.Pipeline()
    bin = gst.parse_bin_from_description('''
    autovideosrc !
    video/x-raw-rgb, width=1280, height=960 !
    ffmpegcolorspace !
    xvimagesink
    ''', False)
    pipeline.add(bin)

    pipeline.set_state(gst.STATE_PLAYING)

    while True:
        sleep(1)

在上面的版本中,它运行良好,如果我取消注释 import cv2 语句,它会给我无休止的错误消息:

libv4l2:错误得到 4 个连续帧解码错误,最后一个错误:v4l-convert:错误无法枚举帧索引:6 for:RGB3 1280x960 using src:MJPG 1280x960,错误:无效参数

我在 Kubuntu Linux 12.04 上,使用 OpenCV 版本 2.4.1,Gstreamer 版本 0.10.36

openCV 对我的 Gstreamer 有什么影响? 如何同时使用?

【问题讨论】:

【参考方案1】:

问题可能是gstreamer bad plugins已经有opencv了。因此,您的 opencv 安装可能与 gstreamer 期望的版本发生冲突。

如果您希望 gstreamer 在其构建中启用 opencv,请确保先安装 opencv 然后再安装 gstreamer。如果您不想这样做,请执行相反的操作。

【讨论】:

感谢您的回答。我认为我的 Gstreamer 构建来自 Ubuntu 存储库,我自己构建了我的 OpenCV。我将尝试在我的机器上构建 GStreamer。 混合各种软件才是正确的做法。但请确保您拥有 Gstreamer 所需的正确版本的 OpenCV。情况并非相反。任何版本的 opencv 都不适用于 gstreamer。【参考方案2】:

找到了解决方法:

如果我在设置 Gstreamer 管道后延迟导入 OpenCV,则 OpenCV 和 Gstreamer 可以很好地协同工作。

(在上面的示例中,这对应于将 'import cv2' 语句移到 'pipeline.add(bin)' 之后)

但这不是我喜欢的答案。

【讨论】:

【参考方案3】:

另外,我建议将您的 openCV 处理重新安装到 gstreamer 插件中,这样您就可以正确安排它。

【讨论】:

【参考方案4】:

或者,OpenCV(2.4.x 或更高版本)可以打开 GStreamer 管道。示例见Using custom camera in OpenCV (via GStreamer)。

OpenCV 3.0(开发分支)与 GStreamer 1.0 集成。

【讨论】:

以上是关于如何结合gstreamer和opencv?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV Python 和 GStreamer 后端创建 x264 RTSP 服务器

如何将 Opencv VideoWriter 与 GStreamer 一起使用?

如何为 opencv 安装 gstreamer 1.0 badplugin?

带有 Gstreamer 流的 OpenCV 具有延迟、缓慢和伪影

从 python 中的 opencv 写入 Gstreamer 管道

我是不是需要使用 Gstreamer 构建 OpenCV 才能在 OpenCV 中使用 Gstreamer