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个捕获对象使用。 任何帮助,将不胜感激。