我试图将带有(0,10)值的numpy数组转换为1通道彩色图像
示例:
result = [[0 0 1]
[0 3 1]
[1 2 2]]
为:
我尝试使用此代码:
cm = ListedColormap(color_map(4, True), 'pascal', 4)
plt.register_cmap(cmap=cm)
plt.imsave('outputarray.png', result, cmap='pascal')
(color_map来自:https://gist.github.com/wllhf/a4533e0adebe57e3ed06d4b50c8419ae)
但是:
im = Image.open('outputarray.png')
im2 = np.array(im)
print im2.shape
print im2.min()
print im2.max()
返回:
shape: (3, 3, 4)
min: 0
max: 255
我认为它应该是:
shape: (3, 3)
min: 0
max: 3
谢谢!
答案 0 :(得分:0)
形状为(3, 3, 4)
,因为图像是png图像,有四个通道,rgb和alpha。
为了获得原始阵列形状,您可以将图像转换为只有一个通道的灰度。
>>> im2 = im.convert("L")
>>> im2 = np.array(im2)
>>> im2
array([[ 0, 0, 38],
[ 0, 113, 38],
[ 38, 75, 75]], dtype=uint8)
>>> im2.shape
(3, 3)
然后用尽可能小的整数替换灰度值。
>>> for i in range(3, 0, -1):
... im2[im2==np.max(im2)] = i
>>> im2
array([[0, 0, 1],
[0, 3, 1],
[1, 2, 2]], dtype=uint8)
>>> im2.min
0
>>> im2.max
3