我喜欢用opencv捕捉USB网络摄像头提供的视频。为此,我尝试将VideoCapture类与v4l2后端一起使用。按照https://docs.opencv.org/3.2.0/d8/dfe/classcv_1_1VideoCapture.html处的示例,我通过以下方式调用构造函数:
VideoCapture vc(id + CAP_V4L2);
其中id表示我的相机(此处为0)。
为了检查是否成功,我做了这样的事情:
cout << vc.get(CAP_PROP_MODE)<<endl; // return 0 instead of the value of CAP_V4L2
我还确保使用V4L / V4L2编译opencv。 getBuildInformation()显示以下行:
[V4L / V4L2:使用libv4l1(版本1.14.2)/ libv4l2(版本1.14.2))
目前,我正在使用Ubuntu 18.04来宾系统和Ubuntu 18.04系统作为主机的Virtualbox 6.0.4。
这里是一个最小的例子:
int main() {
int id = 0;
VideoCapture vc(id + CAP_V4L2);
if(!vc.isOpened()) {
std::cerr << "Unable to open cam " << std::endl;
exit(-1);
}
cout << vc.get(CAP_PROP_MODE) << " | " << CAP_V4L2 <<endl; // 0 | 200
}
我非常感谢您的帮助