Как преобразовать массив Numpy в (и отобразить) изображение? - PullRequest
172 голосов
/ 17 апреля 2010

Я создал массив таким образом:

import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]

Я хочу, чтобы это отображало одну красную точку в центре изображения 512x512. (По крайней мере, для начала ... Я думаю, что я могу выяснить остальное оттуда)

Ответы [ 5 ]

225 голосов
/ 17 апреля 2010

Должно работать следующее:

from matplotlib import pyplot as plt
plt.imshow(data, interpolation='nearest')
plt.show()

Если вы используете ноутбук / лабораторию Jupyter, используйте эту встроенную команду перед импортом matplotlib:

%matplotlib inline 
166 голосов
/ 17 апреля 2010

Вы можете использовать PIL для создания (и отображения) изображения:

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[256, 256] = [255, 0, 0]
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()
48 голосов
/ 17 апреля 2010

Кратчайший путь - использовать scipy, например:

from scipy.misc import toimage
toimage(data).show()

Для этого также необходимо установить PIL или подушку.

Аналогичный подход, также требующий PIL или Pillow, но который может вызвать другого зрителя :

from scipy.misc import imshow
imshow(data)
3 голосов
/ 17 апреля 2010

Используя pygame , вы можете открыть окно, получить поверхность в виде массива пикселей и манипулировать оттуда по своему усмотрению. Однако вам нужно будет скопировать ваш массивный массив в массив Surface, что будет намного медленнее, чем выполнение реальных графических операций на самих поверхностях Pygame.

0 голосов
/ 17 апреля 2010

Библиотека изображений Python может отображать изображения с использованием массивов Numpy. Взгляните на эту страницу для примера кода:

РЕДАКТИРОВАТЬ: Как указано в примечании внизу этой страницы, вы должны проверить последние заметки о выпуске, которые значительно упрощают:

http://effbot.org/zone/pil-changes-116.htm

...