Я пытаюсь сделать дешевую стереокамеру, читая с двух веб-камер USB одновременно. Мой код:ошибка потоковой передачи из двух веб-камер в opencv
int main(int argc, char** argv)
{
char * window1_name = "Cam 1";
char * window2_name = "Cam 2";
CvCapture* capture1 = cvCaptureFromCAM(1);
CvCapture* capture2 = cvCaptureFromCAM(2);
namedWindow(window1_name, CV_WINDOW_AUTOSIZE);
namedWindow(window2_name, CV_WINDOW_AUTOSIZE);
while (1) {
// Get one frame
IplImage* cam1_frame = cvQueryFrame(capture1);
IplImage* cam2_frame = cvQueryFrame(capture2);
usleep(100000);
cvShowImage(window1_name, cam1_frame);
cvShowImage(window2_name, cam2_frame);
if ((cvWaitKey(10) & 255) == 27) break;
}
cvReleaseCapture(&capture1);
cvReleaseCapture(&capture2);
}
Я получаю следующий выход.
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
libv4l2: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl S_FMT
libv4l2: error setting pixformat: Device or resource busy
libv4l1: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT
Моя камера - Logitech c210, и я на Ubuntu 12.10. Когда я пытаюсь передать из одной камеры, я могу видеть каналы с каждой камеры. Одна камера - cvCaptureFromCAM (1), а другая - cvCaptureFromCAM (2), но она не будет работать одновременно. Я попытался собрать последнюю версию v4l, которая, я считаю, является тем, что использует камера. Еще ничего.
Edit:
Оказывается, я мой USB автобус поддерживается только 900 Мбайт/с, а каждая камера принимает 480 МБ/с при разрешении по умолчанию 640x480. Я использовал программу v4l2-ctl для изменения разрешения по умолчанию перед выполнением программы, и она работала при более низком разрешении.
v4l2-ctl -d /dev/video1 --set-fmt-video=width=320,height=240,pixelformat=YUYV
v4l2-ctl -d /dev/video2 --set-fmt-video=width=320,height=240,pixelformat=YUYV
./my_program
Вы пробовали cvCaptureFromCAM (0) и cvCaptureFromCAM (1). Потому что номер камеры по умолчанию равен 0. Попробуйте. – 2vision2