【问题标题】:Python OpenCV cv2.waitKey(1) cause video window to freeze/not respondingPython OpenCV cv2.waitKey(1) 导致视频窗口冻结/无响应
【发布时间】:2026-02-13 21:40:01
【问题描述】:

所以我正在运行这段代码。

import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture("Resources/test_video.mp4")
while True:
    success, img = cap.read()
    if img is None:
        break
    img = cv2.resize(img, (frameWidth, frameHeight))
    cv2.imshow("Result", img)
    keyPressed = cv2.waitKey(5)
    if keyPressed == ord('q'):
        break;

test_video.mp4 是一个简短的video here 在它完成运行的那一刻,“结果”窗口冻结并且没有响应。即使我按“Q”,也没有任何反应。

我在 Anaconda Spyder 上运行该程序。 cv2 使用 pip install opencv-python 安装

编辑:代码已修复,当按下“q”时窗口退出

【问题讨论】:

  • 你可以在休息前使用 sys.exit()。(你应该导入 sys)
  • 退出整个程序是不是有点矫枉过正?
  • 是的,但是你最终会在休息后杀死你的程序

标签: python opencv freeze opencv3.0


【解决方案1】:

尝试在末尾添加这两行:

import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture("Resources/test_video.mp4")
    while True:
        success, img = cap.read()
        if img is None:
            break
        #img = cv2.resize(img, (frameWidth, frameHeight))
        cv2.imshow("Result", img)
        if cv2.waitKey(1) and 0xFF == ord('q'):
             break
cap.release()
cv2.destroyAllWindows()

可能是它未能在脚本末尾释放资源。请参阅此帖子以获取更多参考:What's the meaning of cv2.videoCapture.release()?

这似乎也是一个常见问题。请参阅herehere

编辑:更新以响应要求在“q”上退出视频的评论。替换行:

if cv2.waitKey(1) and 0xFF == ord('q'):
    break

与:

key = cv2.waitKey(1)
if key == ord('q'):
    break

测试和行为符合预期,使用:

  • Python 3.7
  • OpenCV 3.4.2

【讨论】:

  • 这使程序停止冻结,但我还有另一个问题。当我按“Q”时,它应该中断时什么也没有发生。你能解释一下为什么吗?
  • 已用一些代码更新了答案,以允许视频在按“q”时退出。