如何通过OpenCV和Python的索引从视频中获取帧?

时间:2017-09-07 16:05:59

标签: python opencv video

我需要通过帧索引从视频中访问帧。到目前为止,我使用了这样的代码:

video = cv2.VideoCapture(video_path)
status, frame = video.read()

代码读取第一帧。如果我反复使用代码,我会得到下一帧。但我如何通过索引直接访问任何帧?

换句话说,如果我想要第二帧,如何在不调用read()两次的情况下直接访问第二帧?

2 个答案:

答案 0 :(得分:11)

使用VideoCapture::set() CAP_PROP_POS_FRAMES属性ID来设置要读取的帧的位置。

myFrameNumber = 50
cap = cv2.VideoCapture("video.mp4")

# get total number of frames
totalFrames = cap.get(cv2.CAP_PROP_FRAME_COUNT)

# check for valid frame number
if myFrameNumber >= 0 & myFrameNumber <= totalFrames:
    # set frame position
    cap.set(cv2.CAP_PROP_POS_FRAMES,myFrameNumber)

while True:
    ret, frame = cap.read()
    cv2.imshow("Video", frame)
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

答案 1 :(得分:0)

 this.userService.getUser(this.loggedUser.uid).subscribe(user => ... )