我想创建一个程序来每五秒捕获一次图像。这是我的源代码:
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
答案 0 :(得分:4)
您正在循环开始时读取一次帧,然后将相同的图像写入两个不同的文件。这就是你获得相同形象的原因。
致电sleep(5)
后,您应该添加以下一行:
cap>>frame;
以捕获新图像并将第二个图像写入第二个文件。