我想使用OpenCV分析从网络摄像头拍摄的(部分)帧,其原始分辨率为1280乘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:错误无法枚举frameival index:6 for:RGB3 1280x960使用src:MJPG 1280x960,错误:参数无效
我在Kubuntu Linux 12.04上,使用OpenCV版本2.4.1,Gstreamer版本0.10.36
openCV做了什么来扰乱我的Gstreamer? 我怎样才能同时使用它们?
答案 0 :(得分:1)
问题可能是gstreamer坏插件已经有了opencv。因此,您的opencv安装可能与gstreamer期望的版本冲突。
如果您希望gstreamer在其构建中启用opencv,请确保先安装opencv然后安装gstreamer。如果你不想这样做反过来。
答案 1 :(得分:0)
找到了解决方法:
如果我在设置Gstreamer管道后懒洋洋地导入OpenCV,OpenCV和Gstreamer可以很好地协同工作。
(在上面的示例中,对应于在'pipeline.add(bin)'之后移动'import cv2'语句)
但这不是我喜欢的答案。
答案 2 :(得分:0)
另外,我建议您将openCV处理改装为gstreamer插件,然后才能正确安排。
答案 3 :(得分:0)
或者,OpenCV(2.4.x或更高版本)可以打开GStreamer管道。有关示例,请参阅Using custom camera in OpenCV (via GStreamer)。
OpenCV 3.0(开发分支)与GStreamer 1.0集成。