【问题标题】:Time Delay visual C++ [duplicate]时间延迟视觉C ++ [重复]
【发布时间】:2013-04-03 15:31:07
【问题描述】:

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

【问题讨论】:

  • 有很多方法,见e.g. Sleep,或SetTimer
  • “无法正常工作”是什么意思?
  • 你试过搜索吗?这个问题在网站上已经有很多答案了。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      我会像 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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        相关资源
        最近更新 更多