繁体   English   中英

带视频的opencv圈子检测

[英]opencv circle detection with video

有没有一种方法可以等到发生某种情况时(while循环),或者等10秒后再进行圆圈检测,但仍会显示视频。 我已经尝试过使用while循环,但是如果不满足条件,则框架将不会显示,因为代码没有获得cvShow \\ iamge()。

是的, 这是可能的 ,但是您将不得不使用线程。 声明全局变量bool exec_circle_detection = false; 并启动第二个线程。 在此线程上,调用sleep(10)等待10秒,然后将exec_circle_detection更改为true

在主线程中,在帧捕获循环内,检查布尔变量是否设置为true,如果不是,则不会处理该帧。 这部分看起来像这样(在C中):

char key = 0;
while (key != 27) // ESC
{    
  frame = cvQueryFrame(capture);
  if (!frame) 
  {
      fprintf( stderr, "!!! cvQueryFrame failed!\n" );
      break;
  }

  if (exec_circle_detection)
  {
      // execute custom processing
  }

  // Display processed frame
  cvShowImage("result", frame);

  // Exit when user press ESC
  key = cvWaitKey(10);
}

如果计划每10秒执行一次圆圈检测,则在执行自定义处理后,需要将exec_circle_detection更改为false。 在辅助线程上,调整代码,以便有一个while循环将exec_circle_detection每10秒更改为true。

您可以简单地每X帧运行一次检测。 在您的代码中添加一个帧计数器,执行检测时重新开始计数为0,在每个新抓取的新帧中增加一,并在计数器等于300时执行检测(考虑到您的视频以30 fps显示)。 您将在每次检测之间延迟10秒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM