2016-10-02 83 views
0

我想通过linux上的opencv获取Minoru立体摄像头的图像对。 当我强迫低分辨率它工作正常:Opencv立体摄像头捕获和帧率限制

left = cv2.VideoCapture(0) 
left.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320) 
left.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240) 
right = cv2.VideoCapture(0) 
right.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320) 
right.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240) 

while True: 
    _, left_img = left.read() 
    _, right_img = right.read() 
    ... 

不过,我使用的图像创建深度图,和更大的分辨率将是一件好事。但如果我尝试保留默认,或迫使分辨率为640x480,我击球失误:

libv4l2:在流转弯错误:设备上没有剩余空间

我看了一下USB带宽局限性,但:

  • 这发生在(右起第一次读())第一次迭代
  • 我不需要任何接近60甚至30 FPS,但未能成功地减少了“请求FPS”通过VideoCapture参与(如果这是有道理的)
  • 加入睡觉似乎没有帮助,甚至在左/右之间读取
  • 奇怪的是,如果我做了很多处理(在while循环中),我开始注意到“lag”:事物在现实世界中发生的事情会在阅读过的图片后显示很久。这表明,实际上有一个缓冲的地方,可以和确实积累几个图像(很多)

我试图创建和释放为每个图像读取单独VideoCapture的解决方法,但这是慢了一点总体而言(< 1FPS),更重要的是,图像在进行立体匹配时太多不同步。

我试图理解为什么这会失败,为了找到解决办法。看起来v4l正在分配一个单独的全局太小的缓冲区,以某种方式被2个捕获对象使用。 任何帮助,将不胜感激。

回答