Time Delay visual C ++

时间:2013-04-03 15:31:08

标签: c++ visual-c++ loops opencv

我必须以5秒的间隔保存图像形式的网络摄像头,我试过循环但它无法正常工作..我该怎么办?任何计时器???

if(i==0)
{
    cvSaveImage("crop.jpg",tmp);
    cvShowImage( "crop", tmp);
    i++;
    //printf("%d",i);
}
else
{
    i++;
    if(i==1000)
    {
        cvSaveImage("crop1.jpg",tmp);
        cvShowImage("crop1",tmp);
        //printf("%d",i);
    }
    if(i==2000)
        i=0;
} 

3 个答案:

答案 0 :(得分:1)

使用正确的睡眠功能,而不是用循环来攻击某些东西。正确使用的功能可能取决于您的操作系统,但在Windows上您可以使用Sleep,如Joachim Pileborg建议的那样:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx

答案 1 :(得分:0)

你可以使用时钟。这是一个例子:

http://www.cplusplus.com/forum/beginner/76147/#msg408731

.NET框架上实际上有一个Timer类。

http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.71).aspx

答案 2 :(得分:0)

我会像Raul一样去做,用一个时钟检查自上次保存图像以来的时间。有很多方面你可以这样做,但我 将尝试使用clock来说明这个概念的一个例子:

timePassed = (clock() - lastTime) / CLOCKS_PER_SEC;
bool takeNewPicture = timePassed >= minTimeBetweenShots;
if(takeNewPicture)
{
    cvSaveImage("crop.jpg",tmp);
    cvShowImage( "crop", tmp);
    lastTime = clock();
}

//Continue do whatever you want
这种方法的好处是,你可以在拍摄时做你想做的事 并且你的程序不会停止任何minTimeBetweenShots等于。 使用时的情况如下:

Sleep(timeToSleep)

除非它处于单独的线索中。