在Python中将二维数组转换为彩色图像

问题描述 投票:0回答:2

我有像这样的二维整数列表:

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

问题是我不想要灰度图像。我不知道如何将其转换为彩色图像。我必须使用任何地图功能还是其他功能?

python image numpy python-imaging-library
2个回答
0
投票

您必须将每个 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)

imshow result and printing arr_RGB


-2
投票

实现这一点的方法是使用 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 等。

© www.soinside.com 2019 - 2024. All rights reserved.