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(无符号长秒)
)