簡體   English   中英

如何應用 matplotlib 顏色圖將 NumPy 數組轉換為 PIL 圖像

[英]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)

相當繁忙的單線,但這里是:

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

在此處輸入圖片說明

使用im.save()

在此處輸入圖片說明

  • 輸入 = numpy_image
  • np.unit8 -> 轉換為整數
  • 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')

即使在應用其評論中提到的更改后,已接受答案中描述的方法對我也不起作用。 但下面的簡單代碼有效:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM