Python Opencv和KeyEvents

时间:2019-05-19 08:46:23

标签: python opencv

我想播放视频并阅读每一帧。更具体地说,我希望能够让视频以正常速度播放,然后有时只需按一个键就可以暂停并逐帧迭代。

我尝试使用cv.waitKey(1) & 0xFF == ord('b')。问题在于它仅在按下某个键时才做出反应。有时我需要按4-5次才能反应。

我想要一个暂停功能的原因是我想提取一些数据,但并非所有帧都有趣。遍历每一帧将花费相当长的时间。

代码如下:

def open_video(file_path="videopath/videoname.mp4"):
"""
Open the video and read frame by frame
"""
run_video = True
cap = cv.VideoCapture(file_path)
while cap.isOpened():
    ret, frame = cap.read()
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
    if cv.waitKey(1) & 0xFF == ord('b'):
        print('b pressed')
        run_video = False

    if run_video:
        cv.imshow("frame", frame)
        cv.waitKey(1)
    else:
        cv.imshow("frame", frame)
        cv.waitKey(0)

    # if cv.waitKey(1) & 0xFF == ord('c'):

cap.release()
cv.destroyAllWindows()

编辑:

这似乎可行,但我必须向前推动每一帧:

def open_video(file_path="/VideoPath/video.mp4"):
    """
    Open the video and read frame by frame
    """
    data_extractor = extract_data.extract_data()
    run_video = False
    cap = cv.VideoCapture(file_path)
    while cap.isOpened():
        ret, frame = cap.read()
        cv.imshow("frame", frame)
        input = cv.waitKey(0) & 0xFF
        print(input)
        if input == ord('q'):
            break
        if input & 0xFF == ord('b'):
            print('b pressed')
            data_extractor.start(frame)


    cap.release()
    cv.destroyAllWindows()

0 个答案:

没有答案