我想创建一个程序,每五秒捕获一次图像。这是我的源代码:
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”时捕获两张图像,当执行 sleep 时,程序卡住五秒钟然后继续。但是第一次捕获和第二次捕获之间的图像结果是相同的。
延迟程序的正确函数是什么?为什么两张照片的图像捕获结果相同?
我使用的是 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;
为了捕获新图像并将第二张图像写入第二个文件。
关于c++ - 每隔确定的秒数捕获图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732919/