Как показывать видео кадр за кадром (при нажатии клавиш) с помощью python cv2? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь открыть видеофайл и воспроизводить его кадр за кадром, используя нажатия клавиш.Таким образом, он будет открываться и показывать один кадр бесконечно, пока не будет нажата конкретная клавиша, а затем переключится на следующий кадр.

Я использую python3 и cv2.Я впервые использую cv2, поэтому любые исправления / рекомендации приветствуются.

Приведенный ниже код работает в том смысле, что он показывает видео по одному кадру за раз, а не только при нажатии k., но при нажатии любой клавиши игнорируется q для выхода.

import cv2
import os


def play_video(folder):
    # load video capture from file
    video = cv2.VideoCapture(os.path.join(folder, "Field.mp4"))
    # window name and size
    cv2.namedWindow("video", cv2.WINDOW_AUTOSIZE)
    while video.isOpened():
        # Read video capture
        ret, frame = video.read()
        # Display each frame
        cv2.imshow("video", frame)
        # show one frame at a time
        cv2.waitKey(00) == ord('k')
        # Quit when 'q' is pressed
        if cv2.waitKey(1) == ord('q'):
            break
    # Release capture object
    video.release()
    # Exit and distroy all windows
    cv2.destroyAllWindows()


play_video("bb-eye-s001")

Я хотел бы нажать определенную клавишу, чтобы двигаться вперед (одну, чтобы тоже двигаться назад, ноэто может быть для другого вопроса) и сможет нажать q , чтобы выйти.

Есть предложения?Заранее спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Состояние cv2.waitKey(00) == ord('k'), которое у вас есть, никогда не проверялось.Фактически, эта строка вычисляет True или False, а затем выбрасывает ее.То, что вы хотите остановить до тех пор, пока пользователь не нажмет 'q' или 'k':

while video.isOpened():
    # Read video capture
    ret, frame = video.read()
    # Display each frame
    cv2.imshow("video", frame)
    # show one frame at a time
    key = cv2.waitKey(0)
    while key not in [ord('q'), ord('k')]:
        key = cv2.waitKey(0)
    # Quit when 'q' is pressed
    if key == ord('q'):
        break
...