在OpenCV中,waitKey(30)是什么意思?

32

可能是重复问题:
OpenCV - cvWaitKey( )

我想要过滤视频帧。

for(;;)
{
cap.read( frame);
medianBlur(frame,framedst,5);
imshow("frame",frame);
imshow("framedst",framedst);    
if( waitKey (30) >= 0) break;
}

waitKey(30)是什么意思?因为如果我注释掉if(waitKey(30) >= 0) break;这一行,上面的代码就无法工作!


2
这个问题询问了waitkey,我相信答案解释了为什么你的imshow不起作用。引用答案,OpenCV新手常犯的一个错误是在视频帧循环中调用cv::imshow(),而没有在每次绘制后跟随cv::waitKey(30)。在这种情况下,由于highgui从未被赋予处理cv::imshow()的绘制请求的时间,因此屏幕上什么也不会显示出来。 - chris
没错,我不怎么使用OPENCV。 - Imbarfar
@chris 当我使用网络摄像头作为输入时,我不必调用waitKey。但是系统可能会因在太短的时间内显示太多内容而感到困惑。 - Barney Szabolcs
1个回答

26

waitKey()函数等待"延迟"(这里是30毫秒)的按键事件。正如OpenCV文档中所解释的,HighGui(imshow()是HighGui的一个函数)需要定期调用waitKey,以便处理其事件循环。

也就是说,如果您不调用waitKey,则HighGui无法处理窗口事件,例如重绘、调整大小、输入事件等。因此,即使只有1毫秒的延迟,也请调用它 :)


那么这意味着cWaitkey()与30毫秒后捕获图像没有任何关系。它必须等待并在显示窗口上显示图像。 - Abc
使用waitKey时,我发现在Windows上它会在超时后返回-1的假设有时是错误的 - 而是返回255。因此,许多常见代码几乎立即退出它们的主循环。似乎解决这个跨平台问题的方法是改用waitKeyEx - user2023370

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接