在 OpenCV 中 waitKey (30) 是啥意思? [复制]

Posted

技术标签:

【中文标题】在 OpenCV 中 waitKey (30) 是啥意思? [复制]【英文标题】:what does waitKey (30) mean in OpenCV? [duplicate]在 OpenCV 中 waitKey (30) 是什么意思? [复制] 【发布时间】:2012-09-17 01:20:27 【问题描述】:

可能重复: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;这一行,上面的代码就不行了!

【问题讨论】:

This question 询问waitkey,我相信答案解释了为什么您的imshow 不起作用。引用答案,opencv 新手的一个常见错误是通过视频帧循环调用 cv::imshow(),而不使用 cv::waitKey(30) 跟踪每次绘制。在这种情况下,屏幕上不会出现任何内容,因为 highgui 从来没有时间处理来自 cv::imshow() 的绘制请求。 没错,我不怎么用OPENCV @chris 当我使用网络摄像头作为输入时,我不必调用 waitKey。但是系统肯定会因为在太短的时间内显示太多而感到困惑。 【参考方案1】:

函数waitKey() 等待按键事件“延迟”(此处为 30 毫秒)。正如OpenCV documentation 中解释的那样,HighGui(imshow() 是 HighGui 的一个函数)需要定期调用 waitKey,以处理其事件循环。

也就是说,如果你不调用waitKey,HighGui不能处理windows事件,比如重绘、调整大小、输入事件等。所以只要调用它,即使有1ms的延迟:)

【讨论】:

我知道了,感谢您的快速回答。 那么这意味着 cWaitkey () 在 30 毫秒后与捕获图像没有任何关系。它必须等待并在显示窗口上显示图像。 对于waitKey,我发现在Windows 上超时后它会返回-1 的假设有时是错误的——相反它会返回255。许多常见代码几乎立即退出它们的主循环。看来这个跨平台问题的解决方案是改用waitKeyEx

以上是关于在 OpenCV 中 waitKey (30) 是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我无法让 OpenCV 中的 CV2.waitKey 正常工作。运行 waitKey 后代码无响应

opencv 3 -- waitKey()函数

OPENCV waitKey() 方法返回类型

opencv函数-waitKey()

使用 imshow + waitKey 显示图像 opencv+python 时出现问题

在多线程应用程序中使用 opencv waitKey()