opencv圈检测与视频

时间:2012-02-28 10:28:12

标签: c opencv detection video-processing geometry

有没有办法等到事情发生(循环)或等待10秒再做圆圈检测,但仍然显示视频。我已经尝试使用while循环,但如果条件不满足,框架将不会显示,因为代码没有得到cvShow \ iamge()。

2 个答案:

答案 0 :(得分:1)

是的,可能,但您必须使用线程。声明一个全局变量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循环每10秒将exec_circle_detection更改为true。

答案 1 :(得分:0)

您可以每隔X帧执行一次检测。在代码中添加帧计数器,执行检测时重新启动为0,在每个抓取的新帧上增加1,并在计数器等于300时执行检测,考虑到您的视频显示在30 fps 。每次检测之间都会有10秒的延迟。