我目前正在开发一个行为系统,它将利用移动条、旋转条、交替场甚至小的随机移动物体。最初,这些都是使用Matlab编程实现的,取得了很好的效果。然而,由于与最终使用该代码的硬件不兼容,因此该项目已经转移到Python上。
我已经开始使用Python中的matplotlib模块编写该系统,并取得了一些良好的结果。我利用matplotlib中的动画函数生成快速移动对象的连续流畅运动。然而,随着我更深入地使用matplotlib进行编程,我注意到了一些问题。其中一个问题是,对象的流畅运动并不像之前想象的那样流畅。
由于我将在行为系统的另一部分中使用opencv,我想知道opencv是否具有比matplotlib更特殊的优势,特别是在绘制速率和动画方面。
下面我将详细说明。
这是我构建动画的脚本的一部分,请注意,这个版本会崩溃,我还没有找出原因。
这里有可运行的代码,但每个单独的对象并没有同步移动。
我已经开始使用Python中的matplotlib模块编写该系统,并取得了一些良好的结果。我利用matplotlib中的动画函数生成快速移动对象的连续流畅运动。然而,随着我更深入地使用matplotlib进行编程,我注意到了一些问题。其中一个问题是,对象的流畅运动并不像之前想象的那样流畅。
由于我将在行为系统的另一部分中使用opencv,我想知道opencv是否具有比matplotlib更特殊的优势,特别是在绘制速率和动画方面。
下面我将详细说明。
这是我构建动画的脚本的一部分,请注意,这个版本会崩溃,我还没有找出原因。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.animation as animation
import time
fig = plt.figure()
ax = fig.add_subplot(111)
fig.patch.set_facecolor([0,0,0])
fig.tight_layout()
plt.xlim(-100, 100)
plt.ylim(-100, 100)
plt.axis('off')
# List of variables
width = 1
bars = 20
spacing = 20
step = .01
direction = -1
RB = [] # Establish RB as a Python list
for a in range(bars):
RB.append(patches.Rectangle((a*spacing-200,-100), width, 200,
color=[1,0,0], alpha=0.50))
def init():
for a in range(bars):
ax.add_patch(RB[a])
return RB
def animate(i):
for i in range(bars):
temp = np.array(RB[i].get_xy())
if temp[0] > 200:
temp[0] = -199
elif temp[0] < -200:
temp[0] = 199
else:
temp[0] = temp[0] + step*direction;
RB[i].set_xy(temp)
return RB
t = time.time()
plt.show()
while t < timewidow
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=30,
interval=1,
blit=True)
fig.clf()
这里有可运行的代码,但每个单独的对象并没有同步移动。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.animation as animation
import time
fig = plt.figure()
ax = fig.add_subplot(111)
fig.patch.set_facecolor([0,0,0])
fig.tight_layout()
plt.xlim(-100, 100)
plt.ylim(-100, 100)
plt.axis('off')
# List of variables
width = 1
bars = 20
spacing = 20
step = .01
direction = -1
RB = [] # Establish RB as a Python list
for a in range(bars):
RB.append(patches.Rectangle((a*spacing-200,-100), width, 200,
color=[1,0,0], alpha=0.50))
def init():
for a in range(bars):
ax.add_patch(RB[a])
return RB
def animate(i):
for i in range(bars):
temp = np.array(RB[i].get_xy())
if temp[0] > 200:
temp[0] = -199
elif temp[0] < -200:
temp[0] = 199
else:
temp[0] = temp[0] + step*direction;
RB[i].set_xy(temp)
return RB
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=30,
interval=1,
blit=True)
plt.show()
anim.event_source.stop()
,请参见此问题。您可以通过鼠标单击或另一个计时器触发此操作。 - ImportanceOfBeingErnest