У меня простая проблема, но я не могу ее решить.
Я хочу взять 2D-массив NumPy, который представляет изображение в оттенках серого, и преобразовать его в изображение RGB PIL, применяя некоторые из цветовых карт matplotlib.
Я могу получить разумный вывод PNG с помощью pyplot.figure.figimage
команды:
dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.gist_earth)
plt.savefig('out.png')
Хотя я мог бы адаптировать это, чтобы получить то, что я хочу (возможно, используя StringIO, получаю изображение PIL), мне интересно, нет ли более простого способа сделать это, поскольку это кажется очень естественной проблемой визуализации изображения. Скажем, примерно так:
colored_PIL_image = magic_function(array, cmap)
python
numpy
matplotlib
python-imaging-library
color-mapping
heltonbiker
источник
источник
Ответы:
Довольно загруженный однострочник, но вот он:
myarray
нормализован с максимальным значением в1.0
.myarray
.0-255
диапазона.np.uint8()
.Image.fromarray()
.И вы сделали:
с
plt.savefig()
:с
im.save()
:источник
myarray
» прямо в самое сердце! Я не знал, что это возможно, спасибо!im = Image.fromarray(cm.gist_earth(myarray, bytes=True))
NameError: name 'cm' is not defined
from matplotlib import cm
Image.fromarray -> возвращает объект изображения
источник
Метод, описанный в принятом ответе, не работал у меня даже после внесения изменений, упомянутых в его комментариях. Но приведенный ниже простой код работал:
np_array может быть двухмерным массивом со значениями от 0 до 1 с плавающей запятой o2 от 0 до 255 uint8, и в этом случае ему нужен cmap. Для трехмерных массивов cmap игнорируется.
источник