📜  从图像序列python创建动画(1)

📅  最后修改于: 2023-12-03 14:49:22.947000             🧑  作者: Mango

从图像序列创建动画

有时我们需要将一组图像序列合并在一起并制作成动画,以便更好地展示或演示。本文将介绍如何使用Python创建动画,并将其保存为GIF或视频格式。

准备工作

在运行代码之前,我们需要安装一些库。

!pip install opencv-python==4.4.0.42
!pip install matplotlib==3.3.2
!pip install numpy==1.19.2
!pip install Pillow==8.0.1
!pip install imageio==2.9.0
!pip install moviepy==1.0.3
  • opencv-python:用于读取和处理图像序列。
  • matplotlib:用于显示图像和动画。
  • numpy:用于处理数组和矩阵数据。
  • Pillow:与Python自带的PIL库功能重叠,但是在某些情况下会更方便。
  • imageio:用于将图像序列保存为视频格式。
  • moviepy:用于将图像序列保存为GIF格式。
创建动画
示例图像

我们首先需要一些示例图像来创建动画。这里我们将使用一个简单的示例,一组小人在演奏音乐。

import numpy as np
import cv2

# 创建示例图像
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
img_height, img_width = 200, 300
img = np.zeros((img_height, img_width, 3), dtype=np.uint8)

# 绘制小人
x, y = 100, 80
radius = 50
cv2.circle(img, (x, y), radius, WHITE, thickness=-1)
cv2.line(img, (x, y), (x, y+100), WHITE, thickness=6)
cv2.line(img, (x-radius//2, y+50), (x+radius//2, y+50), WHITE, thickness=6)
cv2.circle(img, (x-radius//2, y+50), radius//6, WHITE, thickness=-1)
cv2.circle(img, (x+radius//2, y+50), radius//6, WHITE, thickness=-1)

# 显示图像
from matplotlib import pyplot as plt
plt.imshow(img)
plt.show()

显示的效果是这样的:

示例图像

创建动画序列

创建一个动画序列,可以使用类似下面的代码。

frames = []

# 添加第1帧
frames.append(img)

# 添加第2-20帧
for i in range(1, 20):
    # 复制上一帧
    newimg = img.copy()

    # 修改新帧
    angle = i * 10
    M = cv2.getRotationMatrix2D((x, y), angle, 1.0)
    newimg = cv2.warpAffine(newimg, M, (img_width, img_height))

    # 添加新帧到列表
    frames.append(newimg)

这个代码将使用cv2.getRotationMatrix2D函数从初始图像创建19个新图像,每个图像都将被旋转10度。

保存为GIF动画格式

我们可以使用moviepy库将动画保存为GIF格式。

import moviepy.editor as mp

# 将图像序列转换为视频
animation = mp.ImageSequenceClip(frames, fps=10)

# 保存为GIF格式
animation.write_gif("animation.gif")

这将在当前目录下保存一个名为“animation.gif”的文件。你可以双击它来查看你的动画。

保存为视频格式

我们可以使用imageio库将动画保存为视频格式。

import imageio

# 保存图像序列到视频
fps = 10
writer = imageio.get_writer("animation.mp4", fps=fps)
for frame in frames:
    writer.append_data(frame)
writer.close()

这将在当前目录下保存一个名为“animation.mp4”的文件。你可以使用任何视频播放器来查看你的动画。

结论

使用Python创建动画非常容易。你只需要创建一个图像序列并将其保存为GIF或视频格式。如果你认为这篇文章有用,请分享给你的朋友们吧!