我想播放视频并阅读每一帧。更具体地说,我希望能够让视频以正常速度播放,然后有时只需按一个键就可以暂停并逐帧迭代。
我尝试使用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()