How to convert a NumPy array to PIL image applying matplotlib colormap
--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Track title: CC H Dvoks String Quartet No 12 Ame
--
Chapters
00:00 How To Convert A Numpy Array To Pil Image Applying Matplotlib Colormap
00:49 Accepted Answer Score 384
01:29 Answer 2 Score 89
01:56 Answer 3 Score 12
02:26 Thank you
--
Full question
https://stackoverflow.com/questions/1096...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #numpy #matplotlib #pythonimaginglibrary #colormapping
#avk47
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Track title: CC H Dvoks String Quartet No 12 Ame
--
Chapters
00:00 How To Convert A Numpy Array To Pil Image Applying Matplotlib Colormap
00:49 Accepted Answer Score 384
01:29 Answer 2 Score 89
01:56 Answer 3 Score 12
02:26 Thank you
--
Full question
https://stackoverflow.com/questions/1096...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #numpy #matplotlib #pythonimaginglibrary #colormapping
#avk47
ACCEPTED ANSWER
Score 392
Quite a busy one-liner, but here it is:
- First ensure your NumPy array,
myarray, is normalised with the max value at1.0. - Apply the colormap directly to
myarray. - Rescale to the
0-255range. - Convert to integers, using
np.uint8(). - Use
Image.fromarray().
And you're done:
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))
with plt.savefig():

with im.save():

ANSWER 2
Score 90
input = numpy_image
np.uint8 -> converts to integers
convert('RGB') -> converts to RGB
Image.fromarray -> returns an image object
from PIL import Image import numpy as np PIL_image = Image.fromarray(np.uint8(numpy_image)).convert('RGB') PIL_image = Image.fromarray(numpy_image.astype('uint8'), 'RGB')
ANSWER 3
Score 12
The method described in the accepted answer didn't work for me even after applying changes mentioned in its comments. But the below simple code worked:
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_array could be either a 2D array with values from 0..1 floats o2 0..255 uint8, and in that case it needs cmap. For 3D arrays, cmap will be ignored.