Я пытаюсь получить пары изображений из стереофонической веб-камеры Minoru, в настоящее время через opencv на 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()
...
Однако я использую изображения для создания карт глубины, и больше разрешения было бы хорошо. Но если я пытаюсь оставить по умолчанию, или принуждая разрешение 640х480, я ударяя ошибки:
libv4l2: ошибка поворотом на поток: не осталось на устройстве пространства
Я прочитал о USB полосой пропускания ограничения, но:
- это происходит на первой итерации (первый читать() справа)
- мне не нужно где-нибудь около 60 или даже 30 кадров в секунду, но не может управлять, чтобы уменьшить «запрошенный FPS» через параметр VideoCapture (если это имеет смысл)
- добавление спит, похоже, не помогает, даже между левым/правым читает
- странно, если я много обрабатываю (в цикле while), я начинаю замечать «лаг»: вещи происходящее в реальном мире проявляется намного позже на прочитанных изображениях. Это говорит о том, что на самом деле есть буфер где-то, что может и действительно накапливает несколько изображений (много)
Я попробовал обходной путь создания и освобождение отдельного видеозахвата для каждого чтения изображения, но это немного слишком медленно в целом (< 1FPS), и, что более важно, изображение слишком сильно не синхронизировано для работы в стереофоническом сопоставлении.
Я пытаюсь понять, почему это не удается, чтобы найти решения. Похоже, v4l выделяет один глобальный слишком маленький буфер, который используется 2 объектами захвата. Любая помощь будет оценена по достоинству.