我正在尝试在jupyter-lab的笔记本中显示来自某些阵列的视频。数组在运行时生成。哪种显示图像的方法可以提供(相对)较高的帧率?使用matplotlib和imshow有点慢。这些图片约为1.8兆像素。 以上是一个非常小的示例,以可视化我想要实现的目标。
while(True): #should run at least 30 times per second
array=get_image() #returns RGBA numpy array
show_frame(array) #function I search for
答案 0 :(得分:0)
最快的方法(例如,用于调试目的)是使用matplotlib inline
和matplotlib animation
软件包。这样的事情对我有用
%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import animation
from IPython.display import HTML
# np array with shape (frames, height, width, channels)
video = np.array([...])
fig = plt.figure()
im = plt.imshow(video[0,:,:,:])
plt.close() # this is required to not display the generated image
def init():
im.set_data(video[0,:,:,:])
def animate(i):
im.set_data(video[i,:,:,:])
return im
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=video.shape[0],
interval=50)
HTML(anim.to_html5_video())
视频将以指定的帧率循环播放(在上面的代码中,我将间隔设置为50毫秒,即20 fps)。
请注意,这是一个快速的解决方法,并且IPython.display
拥有一个Video
软件包(您可以找到文档here),该软件包可用于复制来自文件或URL(例如,来自YouTube)的视频。
因此,您还可以考虑将数据存储在本地,并利用内置的Jupyter视频播放器。