如何应用matplotlib colormap将NumPy数组转换为PIL图像

2024-06-24 12:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的问题,但我找不到解决它的好办法

我想获取一个表示灰度图像的NumPy 2D数组,并在应用一些matplotlib颜色贴图时将其转换为RGB PIL图像

我可以使用pyplot.figure.figimage命令获得合理的PNG输出:

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)

Tags: 图像numpypilmatplotlibfigplt数组灰度
3条回答

即使在应用了评论中提到的更改后,接受答案中描述的方法对我也不起作用。但是下面的简单代码起作用了:

import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')

np_数组可以是一个2D数组,其值为0..1浮动o2 0..255 uint8,在这种情况下,它需要cmap。对于三维阵列,将忽略cmap

这是一艘很繁忙的单程邮轮,但在这里:

  1. 首先确保NumPy数组myarray1.0处使用最大值进行归一化
  2. 将颜色映射直接应用于myarray
  3. 重新缩放到0-255范围
  4. 使用np.uint8()转换为整数
  5. 使用Image.fromarray()

你完成了:

from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))

plt.savefig()一起:

Enter image description here

im.save()一起:

Enter image description here

  • 输入=numpy\u图像
  • np.unit8->;转换为整数
  • 转换(“RGB”)->;转换为RGB
  • Image.fromarray->;返回图像对象

    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')
    

相关问题 更多 >