每隔一秒钟捕获图像

时间:2014-05-19 08:21:25

标签: c++ qt opencv

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

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

1 个答案:

答案 0 :(得分:4)

您正在循环开始时读取一次帧,然后将相同的图像写入两个不同的文件。这就是你获得相同形象的原因。

致电sleep(5)后,您应该添加以下一行:

cap>>frame;

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