Eu tenho um programa C ++ que usa o openCV para abrir uma webcam USB.
Eu compilei o programa e ele roda sem problemas tanto no OSX quanto no Ubuntu.
No entanto, gostaria de algumas vezes iniciar o mesmo programa duas vezes abrindo a mesma cam (cujo id é passado como argumento bash). No OSX isso pode ser feito sem qualquer problema, no Ubuntu, aparentemente, você não pode. O erro que recebo ao lançar a segunda instância que abre a mesma cam no Ubuntu é:
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
É claro que o código está parando porque cam.isOpened()
não foi verificado.
Por que o comportamento é diferente? E há alguma solução simples para ter o mesmo comportamento no Ubuntu?
As linhas de código para abrir a webcam são as seguintes (no OSX eu removi CAP_V4L
):
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;
}
Tags opencv camera usb-device ubuntu osx