c++ - 如何在 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++ - static const VS const 局部变量,哪个性能更好?
- python - python中collatz序列的这段代码好吗?
- ruby-on-rails - rails没有提交表单值?
- c# - MVC:在 Ajax 调用上从控制器返回时,结果未定义
- java - 在 Docker php:7.1-apache-stretch 上安装 java
- java - 想通过 java API 将我的本地目录推送到 github
- c++ - 无法链接 libtiff
- grails - 获取 Grails 2.* 中其他环境的配置
- java - 使用 HttpUrlconnection 登录和上传图片的问题
- c# - Xamarin Forms 应用程序在恢复时生成并发运行的应用程序