Python 使用matplotlib批量绘图并合成视频

实现思路

1.导入matplotlib,绘制图像,并将图片存储为bgr图像

2.导入cv2,读取bgr图像,最终存储为MP4格式文件

示例:

import numpy as np
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import cv2
import PIL.Image as Image

fps =20# 视频帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID')
video_path='C:/Users/test/Desktop/picture2video.mp4'
videoWriter = cv2.VideoWriter(video_path, fourcc, fps, (2400,800)) #尺寸为(2400,800)与图片尺寸保持一致


for i in range(0,200):
    '''绘图'''
    #1. 数据生成
    x = np.random.normal(0, 1, 10)
    y = np.random.normal(0, 1, 10)
	#2.画布设置:
    plt.figure(figsize=(30, 10), dpi=80)#尺寸为(30*80,10*80)与视频尺寸保持一致
    axes=plt.subplot2grid((1,1), (0,0), facecolor='w')
    #3.绘制散点图
    plt.scatter(x,y, c='red', s=500)
    #4.保存图片
    canvas = FigureCanvasAgg(plt.gcf())
    # 绘制图像
    canvas.draw()
    # 获取图像尺寸
    w, h = canvas.get_width_height()
    # 解码string 得到argb图像
    buf = np.fromstring(canvas.tostring_argb(), dtype=np.uint8)
    # 重构成w h 4(argb)图像
    buf.shape = (w, h, 4)
    # 转换为 RGBA
    buf = np.roll(buf, 3, axis=2)
    # 得到 Image RGBA图像对象 (需要Image对象的同学到此为止就可以了)
    image = Image.frombytes("RGBA", (w, h), buf.tostring())
    # 转换为numpy array rgba四通道数组
    image = np.asarray(image)
    # 转换为rgb图像
    rgb_image = image[:, :, :3]
    # 转换为bgr图像
    r,g,b=cv2.split(rgb_image)
    img_bgr = cv2.merge([b,g,r])
    '''生成视频'''
    videoWriter.write(img_bgr)
    '''释放内存'''
    plt.clf()
    plt.close()

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值