我想使用 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 ?我怎样才能同时使用两者?