Я хочу преобразовать массив целых чисел в какое-то "изображение" с помощью PyQt (я решил сделать свое приложение в Qt). У меня такой массив:
Array = [
[0,0,1,0,0],
[0,1,0,1,0],
[1,0,0,0,1],
[0,1,0,1,0],
[0,0,1,0,0]]
Теперь я хочу переписать его на картинку, заменив каждое целое число на квадратные 10x10 пикселей. У меня есть определение для каждого значения в массиве в RGB. Что еще Это какая-то игра жизни, поэтому она должна обновляться на каждом шаге и не должна быть медленной. Может быть, что-то похожее на OpenCV?
Спасибо заранее!
Cheers, Матеуш
Вероятно, вы должны использовать графические библиотеки QT для производительности. Другим, может быть, более простым способом было бы использовать PIL (Python Imaging Library) или некоторые привязки Python к библиотеке ImageMagick или MagickWand (я не нашел хорошую и текущую) и использовать массивы NumPys для вычислений и манипуляций и использовать поверхности или холста с использованием PyGame, QT или другого инструментария GUI.
В PIL есть PIL.Image.fromarray(np_array, 'RGBA')
, который читает подходящие массивы NumPy - тип данных обычно должен быть dtype=int8
, а форма (height, width, n_channels)
.
Для очень простого графического формата, который использует значения байтов ascii, см. NetPBM.
Вы можете легко сделать это с помощью QGraphicsScene и QGraphicsView. Чтобы получить хорошую производительность, вы хотите называть setViewport (QGLWidget()) в вашем экземпляре QGraphicsView
. Создайте подкласс QGraphicsItem, чтобы представить элемент в вашем массиве. Тогда вы сможете даже анимировать изменения, если хотите.
Если вы хотите анимацию или демонстрируете некоторую прогрессию, например, в Conway Game of Life, вы также можете взглянуть на QTimeLine.
Вы можете найти эквивалентную документацию на основе python- на PyQt * или PySide. И PyQt, и PySide используют почти идентичный API, поэтому для большинства всего, что вы можете использовать их взаимозаменяемо.
* Примечание. Сайт PyQt недоступен на момент написания этой статьи.