我有像这样的二维整数列表:
list1 = [[1, 30, 50], [21, 45, 9], [97, 321, 100]]
接下来我将把它转换为 numpy 数组:
myarr = np.asarray(list1)
接下来我将使用 PIL 将其转换为图像,如下所示:
img = Image.fromarray(myarr, "I")
img.save("my.png")
问题是我不想要灰度图像。我不知道如何将其转换为彩色图像。我必须使用任何地图功能还是其他功能?
您必须将每个 RGB 通道分离为不同的数组,根据某些最小值/最大值对它们进行归一化(将它们转换为 0-1 之间的范围)以表示像素颜色强度,然后使用 plt.imshow/plt 显示/保存它们。我保存。
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
list1 = [[1, 30, 50], [21, 45, 9], [97, 321, 100]]
arr = np.array(list1)
arr_R = arr[0]
arr_G = arr[1]
arr_B = arr[2]
# normalizing arr_RGB to have values between 0-255
def normRGB(a):
mynorm = Normalize(vmin=np.min(a), vmax=np.max(a))
return mynorm(a)
# #Run below if you prefer a global (arr) minimum and maximum for RGB channels
# arr = normRGB(arr)
# # otherwise run below
arr_R = normRGB(abs(arr_R)) # absolute values help acknowledging negative values' intensity. exclude them if you mean otherwise
arr_G = normRGB(abs(arr_G))
arr_B = normRGB(abs(arr_B))
# stacking RGB into one ndarray
arr_RGB = np.dstack((arr_R,arr_G,arr_B))
plt.imshow(arr_RGB)
plt.show()
print(arr_RGB)
实现这一点的方法是使用 numpy
import numpy as np
list1 = [[1, 30, 50], [21, 45, 9], [97, 321, 100]]
list1 = np.array(list1).reshape(-1, 3)
现在
list1
将具有 N x 3 的形状,其中第 3 个维度是 RGB。如果你知道最终图像的尺寸,你就可以做
np.array(list1).reshape(N, M, 3)
它会根据您的需要将您的数组重新整形为 RGB。然后,一旦你有了 numpy 数组,你的数组就变成了图像的形状,并且可以将其保存为 PNG 等。