如何应用matplotlib颜色映射将Numpy数组转换为PIL图像

2024-06-24 12:20:16 发布

您现在位置: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数组灰度
2条回答

接受回答中描述的方法在应用了它的评论中提到的更改之后对我也不起作用。但在下面简单的代码工作

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

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

很忙的一班,但是在这里:

  1. 首先确保您的numpy数组myarray是用最大值1.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

相关问题 更多 >