У меня есть программа на C ++, использующая openCV, которая открывает веб-камеру.
Следующие строки выглядят следующим образом:
cout<<"camera initializing\n";
VideoSettings cam(camNum + CAP_V4L);
cout<<"camera initialized\n";
cout<<"Ch3ck c4m3ra is 0p3n3d\n";
if ( !cam.isOpened())
{
cout << "Could not open reference " << sourceReference << endl;
return -1;
}
Я скомпилировал программу, и она без проблем работает.
Однако иногда мне хотелось бы дважды запускать одну и ту же программу на Ubuntu18.04 с одной и той же камерой (идентификатор которой передается в качестве аргумента bash).Я получаю ошибку при запуске второго экземпляра, который открывает ту же камеру:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Unable to stop the stream: Device or resource busy
VIDEOIO ERROR: V4L: can't open camera by index 0
Конечно, код останавливается, потому что cam.isOpened()
не проверено.
Та же программа (удалениеCAP_V4L
) на OSX можно запускать много раз без каких-либо проблем.
Почему поведение отличается?И есть ли простой обходной путь, чтобы иметь такое же поведение в Ubuntu?