我目前正在尝试使用动画通过视频(使用OpenCV拍摄)绘制一组数据帧,但由于动画的绘图形式,我似乎无法找到绘制此特定数据帧的方法。
我设法使用以下代码自己绘制它(没有动画):
for ID, group in df.groupby('TrackID'):
group.plot(kind='line', x='HeadX', y='HeadY', ax=ax,
label='ID ' + str(ID), rot=60)
我目前正在尝试:
def getImage():
ret, frame = cap.read()
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
ax.xaxis.set_major_locator(ticker.FixedLocator(x_axis))
ax.yaxis.set_major_locator(ticker.FixedLocator(y_axis))
return image
def drawPlot():
global df_gb
frame_list = [x for x in range(frame_id - 44, frame_id + 1)
if x > 0 and x <= frame_id]
df = dataset_sorted[dataset_sorted['FrameID'].isin(frame_list)]
df_gb = df.groupby('TrackID')
return df_gb
def updatefig(*fargs):
global frame_id
ax.set_xlim(0, 1920)
ax.set_ylim(1080, 0)
frame_id += 1
im.set_array(getImage())
track.set_data(drawPlot())
return im, track
dataset = pd.read_csv(csv_file, sep=',', usecols=range(1, 9))
dataset_sorted = dataset.sort_values('FrameID')
unique_ids = dataset_sorted['FrameID'].unique()
cap = cv2.VideoCapture(video_file)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) / 2
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH) / 2
fig, ax = plt.subplots(1, 1, figsize=(w, h))
ax.xaxis.tick_top()
x_axis = list(np.linspace(0, 1920, num=16))
y_axis = list(np.linspace(1080, 0, num=9))
frame_id = 0
im = plt.imshow(getImage(), animated=True)
track, = ax.plot([], [], '-')
ani = animation.FuncAnimation(fig, updatefig, interval=1,
blit=True, repeat=False)
plt.show()
视频显示,但从未绘制情节。
基本上,如何在动画中使用df.plot()而不是将数据传递给空的ax.plot()?