如何应用matplotlib色彩Map将NumPy数组转换为PIL图像

ecbunoof  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(165)

我有一个简单的问题,但我找不到一个好的解决方案。
我想获取一个表示灰度图像的NumPy 2D数组,并将其转换为RGB PIL图像,同时应用一些matplotlib色彩贴图。
我可以使用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)
5cg8jx4n

5cg8jx4n1#

这是一个相当忙碌的俏皮话,但下面是:
1.首先确保您的NumPy数组myarray是标准化的,最大值为1.0
1.将颜色Map直接应用于myarray
1.重新调整到0-255范围。
1.使用np.uint8()转换为整数。
1.使用Image.fromarray()
然后你就完成了:

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

使用plt.savefig()

使用im.save()

pieyvz9o

pieyvz9o2#

  • 输入=NumPy_IMAGE
  • np.uint8->转换为整数
  • Convert(‘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')
lymgl2op

lymgl2op3#

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

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

NP_ARRAY可以是值从0到1的2D数组,1浮点O2 0到255 uint8,在这种情况下,它需要cmap。对于3D数组,Cmap将被忽略。

相关问题