[英]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.