如何结合使用GStreamer和OpenCV?

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:错误,无法为RGB3 1280x960枚举frameival索引:6,使用src:MJPG 1280x960,错误:无效参数。我使用的是OpenCV版本2.4.1,Gstreamer版本0.10.36的Kubuntu Linux 12.04。openCV对我的Gstreamer造成了什么影响?我该如何同时使用它们?
4个回答

2
问题可能是gstreamer坏插件已经包含了opencv。因此,你的opencv安装可能与gstreamer期望的版本发生冲突。
如果你想让gstreamer在其构建中启用opencv,请先安装opencv,然后再安装gstreamer。如果你不希望这样做,请反过来操作。

谢谢您的回答。我想我的Gstreamer构建是来自Ubuntu存储库,而我的OpenCV是自己构建的。我将尝试在我的机器上构建GStreamer。 - Joost Rekveld
这是混合各种软件的正确方法。但一定要确保您拥有 Gstreamer 所需的正确版本的 OpenCV。而不是相反的情况。任何版本的OpenCV都无法与Gstreamer配合工作。 - av501

0

另外,OpenCV(2.4.x或更高版本)可以打开GStreamer管道。请参见{{link1:在OpenCV中使用自定义相机(通过GStreamer)}}以获取示例。

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


0
找到了一个解决办法:
如果我在设置好Gstreamer管道之后才懒散地导入OpenCV,OpenCV和Gstreamer可以很好地配合使用。
(在上面的例子中,这意味着将'import cv2'语句移到'pipeline.add(bin)'之后)
但这不是我喜欢的答案。

0
此外,我建议将您的openCV处理重新调整为gstreamer插件,这样您就可以正确地进行调度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接