在训练模型时需要大量图片,改程序可将视频转换成帧。
import cv2 import os import sys # 读取文件路径,视频文件所在位置 input_path = r"D:/video" #设定每隔多少帧截取一帧 fram_interval = 7 filenames = os.listdir(input_path) video_prefix = input_path.split(os.sep)[-1] #自动建立一个新文件夹,名称为原文件夹名称后加上_frames frame_path = '{}_frame'.format(input_path) if not os.path.exists(frame_path): os.mkdir(frame_path) cap = cv2.VideoCapture() for filename in filenames: filepath = os.sep.join([input_path,filename]) cap.open(filepath) #获取视频帧数 n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #若画质低,则略过头帧 #for i in range(42): #cap.read() for i in range(n_frames): ret, frame = cap.read() #每隔frame_interval帧进行一次截屏操作 if i % fram_interval == 0: imagename = '{}_{:0>6d}.jpg'.format(filename.split('.')[0], i) imagepath = os.sep.join([frame_path, imagename]) print('exported {}!'.format(imagepath)) cv2.imwrite(imagepath, frame) #图片重命名 path="D:/video_frame/" #获取该目录下所有文件,存入列表中 fileList=os.listdir(path) n=0 m=0 for i in fileList: #设置旧文件名 oldname=path+ os.sep + fileList[n] #设置新文件名 newname=path+os.sep +"train"+str(m+1)+".jpg" os.rename(oldname, newname) print(oldname, '======>', newname) n+=1 m+=1 cap.release()