У меня две разные камеры. Я использовал ниже простой код, и я получаю сообщение об ошибке. На этом сайте есть аналогичный вопрос, но ответа нет. Сообщение об ошибке:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file
/home/OpenCV/opencv-2.4.10/modules/highgui/src/window.cpp, line 269
Код:
VideoCapture cap(2);
VideoCapture cap2(1);
if(!cap.isOpened()) // check if we succeeded
{
cout << "Webcam cannot open!\n" ;
return -1;
}
if(!cap2.isOpened()) // check if we succeeded
{
cout << "Webcam2 cannot open!\n" ;
return -1;
}
namedWindow( "Window1", CV_WINDOW_AUTOSIZE );
namedWindow( "Window2", CV_WINDOW_AUTOSIZE );
for(;;)
{
iKey = waitKey(5);
if (iKey == ESC) { break; }
cap >> frame;
cap2 >> frame2;
imshow("Window1", frame);
imshow("Window2", frame2);
}
EDIT 1 Эти камеры используют один и тот же концентратор в соответствии с моим поиском на веб-сайте. Я сделал тест для этого, и выход ниже. Я не понимаю, что я должен сделать, чтобы решить эту проблему.
sudo cat /sys/kernel/debug/usb/devices | grep "B: "
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 37/900 us ( 4%), #Int= 2, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
Если вы получите раму с низким разрешением, проблема будет решена. Для меня достаточно кода.
VideoCapture cap1 = VideoCapture(1);
VideoCapture cap2 = VideoCapture(2);
cap1.set(CV_CAP_PROP_FRAME_WIDTH, 300);
cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 300);
cap2.set(CV_CAP_PROP_FRAME_WIDTH, 300);
cap2.set(CV_CAP_PROP_FRAME_HEIGHT, 300);
У меня такая же проблема с двумя камерами с глубиной (USB) на двух USB-портах рядом друг с другом. Они использовали ту же самую шину usb внутри и были слишком много, поэтому я переключил один на свой USB-порт 3.0 (это еще одна шина), и теперь он работает.