【问题标题】:How to close OpenCV window (Python 3) in macOS?如何在 macOS 中关闭 OpenCV 窗口(Python 3)?
【发布时间】: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,它仍然无法正常工作。
  • 是的,因为我说的还不止这些。我说你也必须跳出循环。请不要只忽略第一点以外的所有内容。

标签: python-3.x macos opencv


【解决方案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()

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2021-02-22
    • 2012-03-08
    • 2018-05-18
    相关资源
    最近更新 更多