首页 > 解决方案 > 如何在 Ubuntu 18.04 上启动使用网络摄像头两次的相同 opencv C++ 程序?

问题描述

我有一个使用 openCV 打开网络摄像头的 C++ 程序。

执行此操作的行如下:

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 上使用相同的 cam 启动相同的程序两次(其 id 作为 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()未经验证。

OSX 上的相同程序(删除CAP_V4L)可以多次启动而没有任何问题。

为什么行为不同?有任何简单的解决方法可以在 Ubuntu 上具有相同的行为吗?

标签: c++macosopencvubuntuwebcam

解决方案


推荐阅读