一、生成视频
1、传入视频
#传入视频
video_path=r"具体路径"
video_capture = cv2.VideoCapture(video_path)
#打开摄像头获取
video_capture = cv2.VideoCapture(0)
2、保存视频
注意这一段要放在循环处理的前面。
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 指定视频视频编解码器格式
fps = video_capture.get(cv2.CAP_PROP_FPS) #帧率
size = (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))) #自动获取视频大小
out = cv2.VideoWriter('output.avi', fourcc, fps, size) #opencv好像只能导出avi格式
3、按每帧处理添加到视频之中
注意这一段要放在循环内,每帧由模型处理后,写入VideoWriter(out)中。
out.write(im0) # 存储帧图像——依次存入每一帧获取的图像 (im0为每帧frame)
#显示预览效果
cv2.namedWindow('image',0)
cv2.resizeWindow("image", 544, 960) #设置预览窗口大小
cv2.imshow("image", im0)
二、生成GIF
1.先在while中的循环处理图像后,保存帧
# save gif
save_gif = False
if(save_gif):
i = i+1 # 控制变量,达到20帧,生成gif
frame_RGB = cv2.cvtColor(output_image, cv2.COLOR_BGR2RGB) # 因为opencv使用的是BGR,而imageio使用RGB
image_list.append(frame_RGB)
if i <= 20:
cv2.imwrite(f'save_frames/{i}.jpg', frame_RGB)
2.调用create_gif生成gif文件
import os
import cv2
import imageio
def create_gif(img_path="save_frames", gif_name='new.gif', duration = 0.08):
'''
:param image_list: 这个列表用于存放生成动图的图片
:param gif_name: 字符串,所生成gif文件名,带.gif后缀
:param duration: 每帧图像间隔时间
:return:
'''
frames = []
for image_name in os.listdir(img_path):
temp = os.path.join(img_path, image_name)
print(temp)
img = cv2.imread(temp)
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
frames.append(img)
imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
return
if __name__ == '__main__':
create_gif()