Я только что установил Ubuntu 14.04 и openCV 2.4.9 на новый компьютер.
У меня был рабочий код, который в какой-то момент закрывает последнее cvVideoCapture и открывает другой, который может иметь или не иметь другой индекс:
CvCapture* capture;
capture = cvCaptureFromCAM(1);
...
cvReleaseCapture(&capture);
capture = cvCaptureFromCAM(0);
Этот код работал безупречно с Ubuntu 12.0.4 и OpenCV 2.4.? (Я не уверен, какая версия, но она была старше одного года назад). Теперь он выдает ошибку
HIGHGUI ERROR: V4L: device /dev/video0: Unable to open for READ ONLY
С другой стороны, эквивалент API C++ работает:
VideoCapture cap;
cap.open(1);
...
cap.release();
cap.open(0);
После некоторых экспериментов я уверен, что cvRelease
определенно не для освобождения экземпляра CvCapture
. Я получаю предупреждение компилятора о разных типах указателей. Может быть, вы должны скомпилировать некоторые дополнительные флаги. Вы определенно должны использовать cvReleaseCapture(&capture)
, как указано в документах. Я не уверен, что это решение для вашей проблемы, возможно, вам нужно предоставить дополнительную информацию.
CvCapture* capture;
capture = cvCaptureFromCAM(1);
cvReleaseCapture(&capture);
capture = cvCaptureFromCAM(0);
Вы можете использовать разные имена для каждого устройства камеры open.Like ниже code.Try это.
VideoCapture cap,cap1;
cap.open(1);
...
cap.release();
cap1.open(0);
cvReleaseCapture()
с помощьюcvReleaseCapture()
, ...» docs.opencv.org/modules/highgui/doc/…