【问题标题】:Opencv stereo cameras capture and framerate limitsOpencv 立体相机捕捉和帧率限制
【发布时间】:2017-02-10 18:04:36
【问题描述】:

我正在尝试从 Minoru 立体网络摄像头中获取成对的图像,目前通过 Linux 上的 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 带宽限制的信息,但是:

  • 这发生在第一次迭代中(从右边开始的第一个 read())
  • 我不需要接近 60 甚至 30 FPS,但无法通过 VideoCapture 参数降低“请求的 FPS”(如果这有意义的话)
  • 添加睡眠似乎没有帮助,即使在左/右读取之间也是如此
  • 奇怪的是,如果我进行大量处理(在 while 循环中),我开始注意到“滞后”:现实世界中发生的事情在读取图像时显示得更晚。这表明实际上在某处有一个缓冲区可以并且确实会累积多张图像(很多)

我尝试了一种解决方法,即为每个读取的图像创建和发布一个单独的 VideoCapture,但这总体上有点太慢(

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

【问题讨论】:

    标签: linux opencv v4l2


    【解决方案1】:

    我遇到了同样的问题并找到了这个答案 - https://superuser.com/questions/431759/using-multiple-usb-webcams-in-linux

    由于 Minoru 相机的格式显示为“YUYV”,这可能是 USB 带宽问题。我将每秒帧数降低到 20(在 24 时不起作用),我可以同时看到 640x480 的图像。

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      相关资源
      最近更新 更多