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
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzling Curiosities
--
Chapters
00:00 How To Convert A Numpy Array To Pil Image Applying Matplotlib Colormap
00:47 Accepted Answer Score 392
01:17 Answer 2 Score 12
01:41 Answer 3 Score 90
01:59 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
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzling Curiosities
--
Chapters
00:00 How To Convert A Numpy Array To Pil Image Applying Matplotlib Colormap
00:47 Accepted Answer Score 392
01:17 Answer 2 Score 12
01:41 Answer 3 Score 90
01:59 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.