Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每确定秒拍摄一次图像_C++_Qt_Opencv - Fatal编程技术网

C++ 每确定秒拍摄一次图像

C++ 每确定秒拍摄一次图像,c++,qt,opencv,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 na

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

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>>帧之后,我又添加了一个
cap>>帧
,下一个图像捕获实际上是5秒后的图像。所需的
cap>>帧数取决于您的cpu速度。我在mini PC上试用了它,我需要五个
cap>>帧

在循环开始时读取一次帧,然后将相同的图像写入两个不同的文件。这就是为什么你会得到相同的图像

调用
sleep(5)
后,应添加以下行:

cap>>frame;

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

在循环开始时读取帧一次,然后将同一图像写入两个不同的文件。这就是为什么你会得到相同的图像

调用
sleep(5)
后,应添加以下行:

cap>>frame;

为了捕获新映像并将第二个映像写入第二个文件。

您正在使用Qt,但没有正确的事件循环?制作一个QObject并使用其中一个计时器功能我尝试使用QTimer。如
QTimer timer
timer.start(1000)
结果相同。请消除阻塞睡眠。这是错误的。你每次都会阻挡5秒!我尝试删除sleep函数,结果是一样的。为什么我不能用睡眠来拖延时间?那么,延迟捕获5秒的正确函数是什么?您使用的是Qt,但没有正确的事件循环?制作一个QObject并使用其中一个计时器功能我尝试使用QTimer。如
QTimer timer
timer.start(1000)
结果相同。请消除阻塞睡眠。这是错误的。你每次都会阻挡5秒!我尝试删除sleep函数,结果是一样的。为什么我不能用睡眠来拖延时间?那么延迟捕获5秒的正确功能是什么?谢谢您的解释!保存的图像现在不同了,但第一次捕获和第二次捕获之间的时间间隔不是5秒,而是很短。如何修复此问题?您使用的是什么
sleep
功能?看看它的文档。
sleep
的参数是否以秒或毫秒(或其他形式)为单位?如果以毫秒为单位,则应使用
sleep(5000)
。我使用的是来自#include并基于此[link]()的sleep函数。它应为秒。如果信号到达,看起来
sleep
有时会更快返回。检查sleep的返回值以查看它实际睡眠了多少秒。也许您应该尝试使用不同的sleep函数(也许
QThread::sleep(无符号长秒)
),谢谢您的解释!保存的图像现在不同了,但第一次捕获和第二次捕获之间的时间间隔不是5秒,而是很短。如何修复此问题?您使用的是什么
sleep
功能?看看它的文档。
sleep
的参数是否以秒或毫秒(或其他形式)为单位?如果以毫秒为单位,则应使用
sleep(5000)
。我使用的是来自#include并基于此[link]()的sleep函数。它应为秒。如果信号到达,看起来
sleep
有时会更快返回。检查sleep的返回值以查看它实际睡眠了多少秒。也许您应该尝试使用不同的sleep函数(也许
QThread::sleep(无符号长秒)