import glob, os
# 封装resize函数
def resize_img_keep_ratio(img, target_size=(360, 640)):
old_size = img.shape[0:2] # 原始图像大小
ratio = min(float(target_size[i])/(old_size[i]) for i in range(len(old_size))) # 计算原始图像宽高与目标图像大小的比例,并取其中的较小值
new_size = tuple([int(i*ratio) for i in old_size]) # 根据上边求得的比例计算在保持比例前提下得到的图像大小
img = cv2.resize(img,(new_size[1], new_size[0])) # 根据上边的大小进行放缩
pad_w = target_size[1] - new_size[1] # 计算需要填充的像素数目(图像的宽这一维度上)
pad_h = target_size[0] - new_size[0] # 计算需要填充的像素数目(图像的高这一维度上)
top,bottom = pad_h//2, pad_h-(pad_h//2)
left,right = pad_w//2, pad_w -(pad_w//2)
img_new = cv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,None,(0,0,0))
return img_new
# 将AVI视频转为JPG图片
def aviToJpg(inputpath, fsname, outputpath='H:/kuaice/'):
outputpath = outputpath + str(inputpath).split('\\')[-1].replace('.mp4','')
print('outputpath:',outputpath)
if not os.path.exists(outputpath):
os.makedirs(outputpath)
vc = cv2.VideoCapture(inputpath) # 读入视频文件
c = 0
rval = vc.isOpened()
# timeF = 1 #视频帧计数间隔频率
while rval: # 循环读取视频帧
c = c + 1
rval, frame = vc.read()
if rval:
# img为当前目录下新建的文件夹
frame = resize_img_keep_ratio(frame)
cv2.imwrite(os.path.join(outputpath, (fsname + '_' + '{:0>5d}'.format(c) + '.jpg')), frame) # 存储为图像
# cv2.imwrite(os.path.join(outputpath, ('{:0>5d}'.format(c) + '.jpg')), frame[0:1100, 0:1920]) # 存储为图像
cv2.waitKey(1)
else:
print(datetime.datetime.now().strftime('%Y%m%d%H%M%S') + ' ' + outputpath + " 完成")
break
print('完成!!')
if __name__ == '__main__':
vediolist = glob.glob('H:/kuaice/*.mp4')
for item in vediolist:
aviToJpg(item, str(item).split('\\')[-1].replace('.mp4',''))
print('全部完成!!')
Posted in自动化