Захват нескольких веб-камер (uvcvideo) с помощью OpenCV в Linux

Я пытаюсь одновременно передавать изображения с 3 устройств Logitech Webcam Pro 900, используя OpenCV 2.1 на Ubuntu 11.10. Драйвер uvcvideo загружается для них.

Захват двух устройств работает нормально, однако с тремя я сталкиваюсь с ошибкой нехватки места для третьего:

libv4l2: error turning on stream: No space left on device

Кажется, я столкнулся с этой проблемой: http://renoirsrants.blogspot.com.au/2011/07/multiple-webcams-on-zoneminder.htmlи я попытался сделать quirks=128 (или практически любую другую -два значения) трюк, но безрезультатно. Я также попробовал на другой машине с двумя концентраторами USB 2.0 и подключил две камеры к одному и третью камеру ко второму, что привело к той же проблеме. Я инициализирую примерно следующим образом (использую N камер, поэтому результат фактически помещается в вектор STL):

cv::VideoCapture cap0(0); //(0,1,2..)

и пытаюсь захватить все камеры в цикле, как

cap0.retrieve(frame0);

. Это отлично работает для N=2 камер. Когда я устанавливаю N=3, открывается третье окно, но изображение не появляется, а консоль забита ошибками V4L2. Точно так же, когда я устанавливаю N = 2 и пытаюсь открыть третью камеру, скажем, в Cheese (простое приложение для захвата веб-камеры), это тоже не работает.

А теперь большое, но: после того, как я попробовал guvcview, запустив три экземпляра этого, я смог одновременно просматривать три камеры (без проблем с точки зрения частоты кадров или связанных с этим проблем), так что это не похоже на аппаратное обеспечение. проблема. Я полагаю, что есть какое-то свойство, которое я должен установить, но я не уверен, что это такое. Я просмотрел MJPEG (который, похоже, поддерживают эти камеры), но мне не удалось установить это свойство или определить, в каком режиме (yuyv?) они работают, если я запускаю их из OpenCV.

Мысли?

12
задан geez 20 March 2012 в 05:29
поделиться