如何在 macOS 中关闭 OpenCV 窗口(Python 3)?
Posted
技术标签:
【中文标题】如何在 macOS 中关闭 OpenCV 窗口(Python 3)?【英文标题】:How to close OpenCV window (Python 3) in macOS? 【发布时间】:2021-11-19 01:48:04 【问题描述】:我是第一次使用 macOS High Sierra 和 Spider IDE 进行 Python 编程。
当我按键盘上的q键时,窗口没有关闭。输出窗口在最后一帧冻结,控制返回到 Python 提示符。
我们将不胜感激任何解决方案或解决方法。我也很想知道原因。
以下是 Python 和 OpenCV 版本的详细信息。
Python 3.9.7 OpenCV 4.5.3 Spyder 5import cv2
The code is as follows,
import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)
window_name = "Result"
cv2.namedWindow(window_name)
while cap.isOpened():
success, img = cap.read()
if success:
cv2.imshow(window_name, img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyWindow(window_name)
【问题讨论】:
那是因为你被困在循环中……因为你没有在视频结束时打破循环。 --isOpened
将永远保持真实。它只告诉您文件可以打开和读取,而不是视频已经结束。创建 VideoCapture 实例后,您必须仅检查一次 isOpened
。你必须检查并打破:if not success: break
。每个人都做错了,因为每个人似乎都遵循写得很糟糕的“教程”甚至“视频教程”。不得不一直重复这一点很累。
我将它替换为 true,它仍然无法正常工作。
是的,因为我说的还不止这些。我说你也必须跳出循环。请不要只忽略第一点以外的所有内容。
【参考方案1】:
注意:成功变量 - 是一个布尔标志,告诉您下一帧是否可供读取。
如果成功为假,您可能已经到了视频的结尾。那么,你的程序就会陷入死循环,因为你从来没有满足if success: ...
的条件,所以你无法到达命令if cv2.waitKey(1) & 0xFF == ord('q'): break
。
首先,您必须更改 while 循环中的条件。
改变
while cap.isOpened():
success, img = cap.read()
if success:
cv2.imshow(window_name, img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
到
while cap.isOpened():
success, img = cap.read()
if not success:
break
cv2.imshow(window_name, img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
如果您仍然遇到与我的 Jupyter Notebook 相同的问题,请尝试在销毁窗口后添加 cv2.waitKey(1)
。
cv2.destroyAllWindows()
cv2.waitKey(1)
cap.release()
【讨论】:
以上是关于如何在 macOS 中关闭 OpenCV 窗口(Python 3)?的主要内容,如果未能解决你的问题,请参考以下文章