(1)读取文件:

video = cv.VideoCapture('video.avi') # 读取视频文件

(2)分帧读取视频:

ret,frame = video.read()

注:参数ret为布尔值True或者False,代表有没有读取到图片。第二个参数frame表示截取到一帧的图片,即返回的视频帧,可以利用cv.imwrite()保存帧。

(3)对每一个帧图像进行保存:

cv.imwrite('D:\\save\\'+str(i)+'.png',frame)

看下面的完整程序

import cv2 as cv

#截图图像
def cutVideo():
    i = 0
    video = cv.VideoCapture('video.avi') # 读取视频文件
    while(True):
        ret,frame = video.read()
        cv.imshow('video',frame)
        c = cv.waitKey(50)
        if c == 27:
            break
        i=i+1
        if i%5==0:
            cv.imwrite('D:\\save\\'+str(i)+'.png',frame)


cutVideo()
cv.destroyAllWindows()

注:cv.waitKey()表示等待的时间,时间单位为毫秒(1秒=1000毫秒)
(1)如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件
(2)如果设置waitKey(10),则表示程序会等待10毫秒,继续运行
(3)如果设置c = waitKey(0),则会返回用户按下键对应的ASCII码。比如:

while True:
    if waitKey(100)==27:
        break
在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,继续循环

while True:
    if waitkey(1000)==ord('q'):
        break
我们告诉OpenCv等待用户触发事件,等待时间为1000ms,如果在这个时间段内, 用户按下'q',则跳出循环,否则,则跳出循环