gpt4 book ai didi

python - 如何在Python动画函数中返回未知数量的对象

转载 作者:行者123 更新时间:2023-11-30 22:03:34 26 4
gpt4 key购买 nike

我目前正在尝试对一系列图像进行动画处理,其中为每个图像绘制最初未知数量的椭圆。到目前为止我已经尝试了很多事情,但还没有找到解决方案,尽管我想我已经接近了。这是我的代码:

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

def plot_images(img1, img2, objects, ax):

im1 = ax.imshow(img1)
im2 = ax.imshow(img2 with transparency as an overlay)

# plotting an ellipse for each object
e = [None]*len(objects)
for j in range(len(objects)):
e[j] = Ellipse(xy=(objects['x'][j], objects['y'][j]),
width=6 * objects['a'][j],
height=6 * objects['b'][j],
angle=objects['theta'][j] * 180. / np.pi)
e[j].set_facecolor('none')
e[j].set_edgecolor('red')
ax.add_artist(e[j])

return im1, im2, e


def animate(j):

# extracting objects
im1, im2, objects = object_finder_function()

imm1, imm2, e = plot_images(im1, im2, objects, axs)


return imm1, imm2, e

fig, axs = plt.subplots()
ani = animation.FuncAnimation(fig, animate, frames=image_number, interval=50, blit=True)
plt.show()

现在,当我尝试此代码时,我收到以下错误消息:

AttributeError: 'list' object has no attribute 'get_zorder'

所以我尝试了不同的方法,但最终,我发现当作为测试时,我放入了plot_images函数

return im1, im2, e[0], e[1], e[2]

并相应地更改动画函数,即

imm1, imm2, e0, e1, e2 = plot_images(im1, im2, objects, axs)

return imm1, imm2, e0, e1, e2

我没有收到错误消息,并且省略号实际上按照我的预期绘制在相应的帧中。现在的问题是,对于一个图像,我想绘制数百个椭圆,因此我必须手动将其全部写下来(即 e[0]、e[1]、e[2] - - e[k],与 animate 函数相同),这似乎不是正确的方法。另一件事是,正如我已经说过的,每个图像的椭圆数量都会发生变化,并且之前是未知的,所以我不可能相应地调整功能。

如何返回这个省略号列表,以便动画读取它,就像我将它们全部单独写下来一样,就像在工作示例中所做的那样?

最佳答案

你的代码有点不符合Python风格,所以为了清楚起见我稍微清理了一下。您的 AttributeError 与 get_zorder 函数有关,该函数在 matplotlib 中用于确定如何分层绘图。通过您尝试过的事情,我可以告诉您只需要在最后解压您的 list_of_ellipses 即可。

def plot_images(img1, img2, objects, ax):

im1 = ax.imshow(img1)
im2 = ax.imshow(img2 with transparency as an overlay)

list_of_ellipses = []
for j in range(len(objects)):
my_ellipse = Ellipse(xy=(objects['x'][j], objects['y'][j]),
width=6 * objects['a'][j],
height=6 * objects['b'][j],
angle=objects['theta'][j] * 180. / np.pi)

my_ellipse.set_facecolor('none')
my_ellipse.set_edgecolor('red')
ax.add_artist(my_ellipse)
list_of_ellipses.append(my_ellipse)
return im1, im2, list_of_ellipses


def animate():
im1, im2, objects = object_finder_function()
imm1, imm2, list_of_ellipses = plot_images(im1, im2, objects, axs)
return (imm1, imm2)+tuple(list_of_ellipses)

fig, axs = plt.subplots()
ani = animation.FuncAnimation(fig, animate, frames=image_number, interval=50, blit=True)
plt.show()

关于python - 如何在Python动画函数中返回未知数量的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com