【问题标题】:how combine gstreamer and opencv?如何结合gstreamer和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 有什么影响? 如何同时使用?

【问题讨论】:

    标签: python 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 集成。

        【讨论】:

          猜你喜欢
          • 2011-08-29
          • 1970-01-01
          • 2013-03-22
          • 2018-12-15
          • 1970-01-01
          • 1970-01-01
          • 2022-10-17
          • 1970-01-01
          • 2019-06-25
          相关资源
          最近更新 更多