我想使用 PIL.Image 來保存圖形,并且我想使用 matplotlib cmaps 將資料映射到顏色。我嘗試了以下方法:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
from PIL import Image
M, N = 255, 255
data = np.arange(M*N).reshape((M, N))
cmap_name = 'autumn_r'
cmap_name = cmap_name
cmap = plt.get_cmap(cmap_name)
norm = mpl.colors.Normalize()
scalarMap = cm.ScalarMappable(norm=norm, cmap=cmap)
plt.imshow(data, cmap=cmap)
plt.show()
colors = scalarMap.to_rgba(data)
image = Image.fromarray((colors[:, :, :3]*256).astype(np.uint8))
image.show()
這在matplotlib中繪制:

但是,它在影像中繪制了這個:

如何讓 PIL.Image 顯示與 matplotlib 相同的顏色?
如果還可以添加 alpha 通道,那將很有用
uj5u.com熱心網友回復:
您需要為 PIL 提供與 matplotlib 相同的規范化和 cmap,因此它可以從 2D 陣列 -> 規范化 -> 映射到 cmap 執行相同的映射。
我重寫了您的示例代碼,使其更簡單:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from PIL import Image
M, N = 255, 255
data = np.arange(M*N).reshape((M, N))
cmap = cm.autumn_r
plt.imshow(data, cmap=cmap)
norm = mpl.colors.Normalize()
那么你的答案是:
Image.fromarray(np.uint8(cmap(norm(data))*255)).show()
(在這里找到解決方案,可能是騙子。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517322.html
