PIL-х Image.fromarray()
автоматически определяет mode использовать from the datatype переданной Numpy массива, например, для 8-битовых градаций серого изображения вы можете использовать:
from PIL import Image
import numpy as np
data = np.random.randint(256, size=(100, 100), dtype=np.uint8)
img = Image.fromarray(data) # uses mode='L'
Это, однако, работает только если массив использует совместимый тип данных , если вы просто используете data = np.random.randint(256, size=(100, 100))
, что может привести к массиву int64 (typestr <i8
), который PIL не может обрабатывать.
Вы также можете указать другой режим, например. интерпретировать массив 32bit как RGB изображения:
data = np.random.randint(2**32, size=(100, 100), dtype=np.uint32)
img = Image.fromarray(data, mode='RGB')
Внутренне Image.fromarray()
просто пытается угадать правильный режим и размер, а затем вызывает Image.frombuffer()
.
Изображения могут быть сохранены в любом формате PIL
can handle например: img.save('filename.png')
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.misc.imsave.html – MaxNoe
это решение будет для rgb, но мне нужен один канал – mcExchange
Если вы передадите ему один канал, он записывает один канал. См. Первый пример, это градиент bw. – MaxNoe