我想创建一个程序,每五秒钟捕获一个图像。这是我的源代码:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mat frame;
VideoCapture cap;
cap.open(0);
while(1)
{
cap>>frame;
imshow("frame",frame);
if(waitKey(10)=='c')
{
QString nama = QString("webcam_capture_%1.jpg") .arg(QString::number(x));
imwrite(nama.toStdString(),frame);
x++;
sleep(5);
nama = QString("webcam_capture_%1.jpg") .arg(QString::number(x));
imwrite(nama.toStdString(),frame);
x++;
}
else if(waitKey(10)=='x')
break;
}
cap.release();
return a.exec();
}
当我按下'c'时,程序应该捕获两张图像,当休眠执行时,程序冻结五秒钟,然后继续。但是第一次捕获和第二次捕获的图像结果是相同的。
延迟程序的正确功能是什么?为什么两张照片的图像捕获结果是一样的?
我使用Windows 7, Qtcreator 2.7.2 Qt5, openCV 2.4.6。我也打算在Linux上运行这个程序。
编辑:解决!在按Ove的说法添加了第一个cap>>frame
之后,我又添加了一个cap>>frame
,下一个图像捕获是5秒后的真正图像。所需cap>>frame
的数量取决于您的cpu速度。我在迷你PC上尝试了一下,我需要五个cap>>frame
在循环开始时读取帧一次,然后将相同的图像写入两个不同的文件。这就是为什么你得到相同的图像。
在调用sleep(5)
之后,您应该添加这一行:
cap>>frame;
,以便捕获新图像并将第二个图像写入第二个文件。