如何结合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 具有延迟、缓慢和伪影