3

我想使用 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 用于:RGB3 1280x960 使用 src:MJPG 1280x960,错误:无效参数

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

openCV 做了什么来搞乱我的 Gstreamer ?我怎样才能同时使用两者?

4

4 回答 4

2

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

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

于 2012-09-09T04:01:53.507 回答
0

找到了解决方法:

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

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

但这不是我喜欢的答案。

于 2012-09-09T00:33:08.880 回答
0

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

于 2012-09-10T05:11:28.633 回答
0

或者,OpenCV(2.4.x 或更高版本)可以打开 GStreamer 管道。有关示例,请参阅在 OpenCV 中使用自定义相机(通过 GStreamer)

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

于 2014-07-15T16:22:16.420 回答