Как преобразовать массив numpy в (и отобразить) изображение?

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

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

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

Ответ 1

Вы можете использовать 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()

Ответ 2

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

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

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

%matplotlib inline 

Ответ 3

Самый короткий путь - использовать scipy, например:

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

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

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

from scipy.misc import imshow
imshow(data)

Ответ 4

Используя pygame, вы можете открыть окно, получить поверхность как массив пикселей и манипулировать, как вы хотите оттуда, Вам нужно будет скопировать массив numpy в поверхностный массив, однако это будет намного медленнее, чем делать фактические графические операции на самих дорожках pygame.

Ответ 5

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

EDIT: Как отмечается в нижней части этой страницы, вы должны проверить последние заметки о выпуске, которые делают это намного проще:

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

Ответ 6

Используя подушку, например:

from PIL import Image
from numpy import *

im = array(Image.open('image.jpg'))
Image.fromarray(im).show()