Python OpenCV cv2.waitKey (1) заставляет видеоокно зависать / не отвечать - PullRequest
0 голосов
/ 06 августа 2020

Итак, я запускаю этот фрагмент кода.

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 - это короткое видео здесь В момент его завершения окно «Результат» зависает и становится не отвечает. Даже когда я нажимаю «Q», ничего не происходит.

Я запускаю программу на Anaconda Spyder. cv2 устанавливается с помощью pip install opencv-python

Edit: код был исправлен так, что окно закрывается при нажатии "q"

1 Ответ

2 голосов
/ 06 августа 2020

Попробуйте добавить эти две строки в конце:

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()

Возможно, в конце скрипта не удается освободить ресурс. См. Этот пост для получения дополнительной информации: Что означает cv2.videoCapture.release ()?

Это также, похоже, обычная проблема. См. здесь и здесь .

Изменить: обновить, чтобы ответить на комментарий с запросом выхода из видео на '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
...