每隔一秒捕捉一张图像

Capturing an image every determined seconds

本文关键字:一张 图像 一秒      更新时间:2023-10-16

我想创建一个程序,每五秒钟捕获一个图像。这是我的源代码:

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;

,以便捕获新图像并将第二个图像写入第二个文件。