-3

我必须以 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;
} 
4

3 回答 3

1

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

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

于 2013-04-03T15:35:20.093 回答
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

于 2013-04-03T15:35:16.223 回答
0

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

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)

除非它在一个单独的线程中。

于 2013-04-03T16:10:49.610 回答