c++ - 每隔确定的秒数捕获图像

标签 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”时捕获两张图像,当执行 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/

相关文章:

java - 如何使用 Java 进行倾斜角度校正

python - DCT with cv2和scipy

c++ - 程序在 Debug 构建中运行良好,但在 Release 构建中失败

c++ - 具有两个不同 View 的 Qt 数据模型

c++ - 没有用于初始化的匹配构造函数 - C++ 和 Objective C

c++ - 垂直滚动的 QScrollArea 问题

java - Qt Jambi 和线程

java - OpenCV CascadeClassifier 错误

c++ - 在 C++ 中创建循环(仍在学习中)

c++ - c++11 for 循环的逗号运算符