在做图像修复的过程中,看到网上有一段视频满足要求,如何将该视频转化为一张张的图片,并保存到本地文件夹。
网上有利用Photoshop实现的,还有利用一些转换工具实现的,本博客中利用Python代码实现,利用opencv-python库将视频逐帧提取为一张张图片。
Python代码如下(注意:读取的视频路径中不要有中文):
import cv2
import os
# 创建读取视频的类
capture = cv2.VideoCapture("songhuajiangHAZEvideo.avi") # 注意,视频路径中不要有中文
# 得到视频的高度
height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
print("视频高度:%d" %height)
# 得到视频的宽度
width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
print("视频宽度:%d" %width)
# 得到视频的帧数
count = capture.get(cv2.CAP_PROP_FRAME_COUNT)
print("视频帧数:%d" %count)
# 得到视频的帧速
fps = capture.get(cv2.CAP_PROP_FPS)
print("视频帧速:%d" %fps)
video_path = "songhuajiangHAZEvideo.avi" # 视频路径地址,不要有中文
timeF = 1 # 隔 timeF帧截一次图,1表示全截
images_path = video_path.split('.', 1)[0]
print("images_path: %s" %images_path)
if not os.path.exists(images_path): # 文件夹不存在则新建
os.mkdir(images_path)
vc = cv2.VideoCapture(video_path) # 读入视频文件
c = 1
rat = 1
if vc.isOpened(): # 判断是否正常打开
print('视频读取成功,正在逐帧截取...')
while rat: # 循环读取视频帧
rat, frame = vc.read() # frame为一帧图像,当 frame为空时,ret返回 false,否则为 true
if(c % timeF == 0 and rat == True): # 每隔 timeF帧截一次图像
cv2.imwrite(images_path + '/' + str(c) + '.jpg', frame)
c = c + 1
vc.release()
print('截取完成,图像保存在:%s' %images_path)
else:
print('视频读取失败,请检查文件地址')
运行代码后,生成的文件夹和图片如下: