如何使用 python 和 OpenCV 逐帧显示视频(通过按键)

Bio*_*oso 2 python video user-interface opencv

我正在尝试打开一个视频文件并使用按键逐帧播放它。因此,它将打开并无限期地显示单个帧,直到按下特定的键,然后它会切换到下一帧。

我正在使用 Python 3 和 OpenCV。这是我第一次使用 OpenCV,所以欢迎任何更正/建议。

下面的代码的工作原理是,它一次显示一帧视频,但不仅在我按下时显示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")
Run Code Online (Sandbox Code Playgroud)

我想按一个特定的键前进(也可以后退一个键,但这可能是另一个问题)并且能够按q退出。

有什么建议么?先感谢您!

GPh*_*ilo 7

你所拥有的条件cv2.waitKey(00) == ord('k')从未被测试过。实际上,该行计算TrueFalse,然后将其丢弃。您希望它停止直到用户按下'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
Run Code Online (Sandbox Code Playgroud)