Переписать двумерный массив целых чисел в растровое изображение в Python, используя PyQT - PullRequest
1 голос
/ 03 июня 2011

Я хочу преобразовать массив целых чисел в некую «картинку», используя 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?

Заранее спасибо!

Ура, Матеуш

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Вам, вероятно, следует использовать графические библиотеки QT для повышения производительности.Другим, возможно, более простым способом может быть использование PIL (Python Imaging Library) или некоторых привязок Python к библиотеке ImageMagick или MagickWand (я не нашел хорошего и текущего) и использование массивов NumPy для вычислений и манипуляций, а также рисование наповерхность или холст с использованием PyGame, QT или другого инструментария GUI.

В PIL есть PIL.Image.fromarray(np_array, 'RGBA'), который читает подходящие массивы NumPy - тип данных обычно должен быть dtype=int8, а форма - (height, width, n_channels).

Для очень простого графического формата, который использует значения байтов ascii, см. NetPBM .

1 голос
/ 03 июня 2011

Вы можете легко сделать это с QGraphicsScene и QGraphicsView .Чтобы получить хорошую производительность, вам нужно вызвать setViewport (QGLWidget ()) в вашем QGraphicsView экземпляре.Создайте подкласс QGraphicsItem , чтобы представить элемент в вашем массиве.Тогда вы даже сможете анимировать изменения, если хотите.

Если вы действительно хотите анимацию или демонстрируете какое-то прогрессирование, например, в «Игре жизни» Конвея, вы также можете захотеть взглянуть на QTimeLine .

Эквивалентную документацию на основе python можно найти на веб-сайтах PyQt * или PySide .Как PyQt, так и PySide используют практически идентичный API, поэтому практически все, что вы можете использовать их взаимозаменяемо.

* Примечание. На момент написания этой статьи веб-сайт PyQt был недоступен

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