Как создать изображение из массива numpy float32?
У меня есть массив numpy.ndarray
, который содержит значения float32
. Изображения должны иметь размеры 226×226. Я попытался использовать PIL.Image
для создания образа, но получил ошибку. Я читал, что PIL.Image.fromarray
требуют объекта и режима, и для float мне нужно вызвать fromarray
с 'F'
, Как я пытался.
Вот что я пытался сделать:
from PIL import Image
img = Image.fromarray(slice56, mode='F')
#type(slice56) = <type 'numpy.ndarray'>
#slice56 = array([ 0., 0., 0., ..., 0., 0., 0.], dtype=float32)
И я получаю эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1860, in fromarray
return frombuffer(mode, size, obj, "raw", mode, 0, 1)
File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1805, in frombuffer
return apply(fromstring, (mode, size, data, decoder_name, args))
File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1743, in fromstring
im = new(mode, size)
File "/usr/lib64/python2.6/site-packages/PIL/Image.py", line 1710, in new
return Image()._new(core.fill(mode, size, color))
TypeError: argument 2 must be sequence of length 2, not 1
Может ли кто-нибудь предложить идею, как это сделать? Или как решить эту ошибку?2 ответа:
Я бы согласился с ответом DavidG это быстрое решение для построения изображения из массива numpy. Однако, если у вас есть очень веская причина придерживаться
PIL.Image
, наиболее близким подходом к тому, что вы уже сделали, будет что-то вроде этого:from PIL import Image import numpy as np slice56 = np.random.random((226, 226)) # convert values to 0 - 255 int8 format formatted = (slice56 * 255 / np.max(slice56)).astype('uint8') img = Image.fromarray(formatted) img.show()
Тогда он будет производить что-то вроде приведенных ниже случайных чисел: