我想使用 openCV 从 Logitech C300 网络摄像头获取单帧。当我使用下面的代码时。图像已保存,但在大约 50% 的情况下,它们包含错误(参见图像)。
我现在已经搜索了几个小时,但由于我不知道是什么原因造成的,我不确定哪个关键字可能有助于搜索。对我来说,看起来好像在摄像头仍在更新帧时读取了来自网络摄像头的图像(但这只是一个猜测)。我测试了 uvccapture,它使用标准选项会产生相同的问题(但不太常见),但在使用 -m 选项时可以正常工作。根据手册页,它是“将捕获模式切换为 YUYV 捕获”。
所以我的问题是,有没有办法在 openCV 中使用这种模式?我想避免直接使用 v4l2。
VideoCapture cap(0);
if(!cap.isOpened())
cout << "Opening video device failed" << endl;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1024);
Mat frame;
for(int i = 0; i<50; i++)
{
stringstream str;
str << "/home/ubuntu/image" << i<< ".jpg";
cap >> frame;
imwrite(str.str(), frame);
cout << i << endl;
}
return 0;