Анимировать двумерный массив RGB? - PullRequest
0 голосов
/ 31 октября 2019

Я работаю над LED-Wall с разрешением 24x30 пикселей некоторое время.

На данный момент есть сервер Python, который может интерпретировать и отображать пустые массивы в следующем формате:

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

То есть 24 пикселя в ширину, 30 в высоту и 3 цвета на светодиод. Так что этот массив сделает всю стену черной.

Я сделал несколько анимаций только на самом массиве. Но я действительно хочу перейти к следующим темам:

  • Рисование на стене (например, круги и другие формы).
  • Анимация рисунков.
  • Отображение текста.

Мои вопросы:

  • Как мне связать мой np.array с matplotlib для рисования или анимации?
  • Есть matplotlib даже правильный подход?
  • Как лучше всего отображать шрифты?

1 Ответ

1 голос
/ 31 октября 2019

Вы описываете изображения: 3D-массивы с каналами R, G и B на последней оси. По сути, вы хотите иметь возможность рисовать изображения с помощью 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,Вы можете получить данные в виде массива NumPy с помощью np.asarray(im). Он использует беззнаковые int8 значения, поэтому от 0 до 255. Вы можете изменить масштаб, если вам нужно, скажем, от 0 до 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...