Opencv每帧处理后输出视频或gif动图

一、生成视频

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()

猜你喜欢

转载自blog.csdn.net/weixin_54338498/article/details/129267092