[英]How to convert a NumPy array to PIL image applying matplotlib colormap
我有一個簡單的問題,但我找不到好的解決方案。
我想采用一個代表灰度圖像的 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)
相當繁忙的單線,但這里是:
myarray
使用最大值1.0
標准化。myarray
。0-255
范圍。np.uint8()
轉換為整數。Image.fromarray()
。你已經完成了:
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))
使用plt.savefig()
:
使用im.save()
:
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')
即使在應用其評論中提到的更改后,已接受答案中描述的方法對我也不起作用。 但下面的簡單代碼有效:
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_array 可以是值從 0..1 浮點數 o2 0..255 uint8 的二維數組,在這種情況下它需要 cmap。 對於 3D 數組,cmap 將被忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.