2D RGB数字数组动画制作



我正在用24x30像素制作LED墙一段时间了。

在这一点上,有一个Python服务器可以解释和显示以下格式的numpy数组:

frame = np.zeros([24, 30, 3])

也就是说,每个LED有24个像素宽、30个像素高和3种颜色。所以这个阵列会让墙变成黑色。

我只在数组本身上制作了一些动画。但我真的想继续以下主题:

  • 墙上的绘画(例如圆形和其他形状(
  • 设置图形的动画
  • 显示文本

我的问题:

  • 如何将np.arraymatplotlib连接以进行绘图或动画制作
  • matplotlib是正确的方法吗
  • 显示字体的最佳方法是什么

您正在描述图像:在最后一个轴上有R、G和B通道的3D阵列。从本质上讲,您希望能够使用Python绘制图像。您有很多选择,但我可能首先想到的是PIL(令人困惑的是,库名为PIL,但您安装的软件包是pillow(。

你当然可以在matplotlib中制作任意的图像,包括形状、文本等,但我觉得使用PIL会更容易。我的建议是从一个教程开始了解API。

下面是如何制作一个黑色矩形(就像你举的例子一样(:

from PIL import Image
h, w = 24, 30
im = Image.new("RGB", (w, h), "black")

现在我可以在里面写Hi了,用青色:

from PIL import ImageDraw, ImageFont
font = ImageFont.truetype('/path/to/fonts/Consolas.ttf', size=18)  # Change this!
ImageDraw.Draw(im).text((5, 4),          # Position
'Hi',            # String
(0, 255, 255),   # Colour
font=font,       # Font
)

当然,你可以将其保存为PNG或GIF或其他格式,或者使用类似imageio的东西制作动画GIF。您可以使用np.asarray(im)以NumPy数组的形式获取数据。它使用无符号的int8值,因此0到255。如果需要,例如0到1,您可以重新缩放。

最新更新