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

Posted

技术标签:

【中文标题】我无法让 OpenCV 中的 CV2.waitKey 正常工作。运行 waitKey 后代码无响应【英文标题】:I can not get CV2.waitKey in OpenCV to work properly. After running waitKey the code get unresponsive 【发布时间】:2020-07-24 18:55:24 【问题描述】:

我运行这个简单的代码来显示一张使用 OpenCV 的图片。该图片按预期显示在新窗口中。当我关闭窗口时,spyder 中的控制台卡住了,看起来仍在运行或等待。它看起来像 waitKey() 无法正常工作。我可以继续的唯一方法是重新启动控制台。 当我使用例如 waitKey(1000) 的数字时,程序工作正常,图片显示,窗口关闭,程序按预期完成。 我尝试从提示符运行 Anaconda shell 中的代码,但我遇到了同样的问题 我正在使用 python 3.7.5 非常感谢!

import cv2
cv2.imshow("title", img)
cv2.waitKey()
cv2.destroyAllWindows()

【问题讨论】:

使用 cv2.waitKey(0) @fmw42 零是默认值。有什么意义?? 我使用了 cv2.waitKey(0) 和默认值一样为零。只有当我使用另一个号码时才有效,但这不是我打算做的。感谢您的帮助 也许您可能由于控制台重新启动而打开了多个图像窗口,或者在控制台处理它之前手动关闭了窗口导致它变得混乱。该命令适用于其他所有人。我可以建议你安装 VSCode 并使用逐步调试功能来查看发生了什么,Spyder 不是适合这项工作的工具。 感谢 cmets,我试过 cv2.waitKey(0) 也没有用。这是默认设置。我重新启动电脑并尝试打开一张图片仍然显示相同的问题。我确实安装了 VSCode 并在那里尝试过。我有同样的问题。就像 cv2.destroyAllWindows() 被挂断了 【参考方案1】:

在按下键之前,将焦点放在带有图像的图形窗口上。

【讨论】:

【参考方案2】:

cv2.waitKey() 是一个函数,它会休眠一定的毫秒数,以保持打开 cv2.imshow() 的窗口显示。

正确的用法是以下两种情况之一:

cv2.waitKey(0):休眠直到用户按键; cv2.waitKey(5):休眠 5ms。在这里,可以将数字 5 替换为任何大于零的值,以表示函数必须用于小睡的毫秒数;

在没有任何值的情况下调用 cv2.waitKey() 可能会触发意外行为。

【讨论】:

可以在文档here 中看到,该函数定义包含一个默认参数值 0 用于延迟 int cv::waitKey ( int delay = 0 ),因此在没有值的情况下调用它并没有什么意外,功能已定义

以上是关于我无法让 OpenCV 中的 CV2.waitKey 正常工作。运行 waitKey 后代码无响应的主要内容,如果未能解决你的问题,请参考以下文章

无法让 OpenCV 框架符号在 XCode 中链接

Mac 上 Qt Creator 中的 openCV

让网络摄像头在 OpenCV 中工作

openCV 3.0、openCL 和 meanShiftFiltering

OpenCV - 无法访问 Mat 中的所有像素

如何让 OpenCV 在 Windows 下工作?