我试图制作一个继续旋转图像的动画,但输出视频文件有空内容(仅留下轴),如何修复它?
import math
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import scipy.misc
from scipy import ndimage
my_image="img.png"
out_file="myvideo.mp4"
class UpdateDist:
def __init__(self, ax):
self.ax = ax
self.img = mpimg.imread(my_image)
self.ax.imshow(self.img)
self.degree = 1
def __call__(self, i):
rotated_img = ndimage.rotate(img, self.degree*10)
self.ax.imshow(rotated_img)
self.degree += 1
return self.ax,
plt.axis(False)
plt.grid(False)
fig, ax = plt.subplots()
ud = UpdateDist(ax)
anim = FuncAnimation(fig, ud, frames=100, interval=10, blit=True)
plt.show()
ani.save(out_file, fps=30, extra_args=['-vcodec', 'libx264'])
最佳答案
我对您的代码进行了一些编辑:
- 替换
self.degree
与i
:i
每次迭代增加 1,不需要另一个计数器 - 感动
ax.grid(False)
和ax.axis(False)
(并在ax.clear()
内添加__call__
)方法,以便在每个帧中使用它们 - 已删除
blit
参数来自FuncAnimation
- 替换
.mp4
输出文件格式为.gif
- 已使用
imagemagik
如writer
请告诉我此代码是否实现了您的目标或者您是否需要任何进一步的修改。
完整代码
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from scipy import ndimage
import numpy as np
my_image='img.png'
out_file='myvideo.gif'
class UpdateDist:
def __init__(self, ax, rotational_speed):
self.ax = ax
self.img = plt.imread(my_image)
self.rotational_speed = rotational_speed
def __call__(self, i):
rotated_img = ndimage.rotate(self.img, self.rotational_speed*i, reshape=False)
self.ax.clear()
self.ax.grid(False)
self.ax.axis(False)
self.ax.imshow((rotated_img*255).astype(np.uint8))
return self.ax,
fig, ax = plt.subplots()
ud = UpdateDist(ax = ax, rotational_speed = 1)
anim = FuncAnimation(fig, ud, frames = 91, interval = 1)
anim.save(filename = out_file, writer = 'pillow', fps = 30)
动画
关于python - Matplotlib 将动画保存为视频但获取空内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72328616/