这个问题的答案显示了两种在matplotlib中获取视频的方法。
要点是不要在每次迭代时都重新创建完整的图。如果使用该答案中的第二种方法,则使用
blit=True可能会进一步提高速度。如下面的代码所示。
import cv2import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationdf = pd.Dataframe({"time": np.linspace(0,20, num=100), "force" : np.cumsum(np.random.randn(100))})def grab_frame(cap): ret,frame = cap.read() return frame # or cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)#Initiate vidcap = cv2.VideoCapture(0)# vidcap.set(1,590)fig, (ax,ax2) = plt.subplots(ncols=2,figsize=(20, 10))x=df["time"][7:100]y=df["force"][7:100]#create two image plotsim1 = ax.imshow(grab_frame(vidcap),extent=[0,200,0,100], aspect='auto')line, = ax2.plot(x[0:1],y[0:1],'or')ax2.set_xlim(x.min(), x.max())ax2.set_ylim(y.min(), y.max())def update(i): im1.set_data(grab_frame(vidcap)) line.set_data(x[0+i:1+i],y[0+i:1+i]) return im1, lineani = FuncAnimation(fig, update, frames=len(x), interval=1, blit=True)plt.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)