使用模式P将阵列转换为1通道图像

时间:2017-06-13 13:13:01

标签: python numpy image-processing

我试图将带有(0,10)值的numpy数组转换为1通道彩色图像

示例:

result = [[0 0 1]
          [0 3 1]
          [1 2 2]]

为:

numpy array

我尝试使用此代码:

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

谢谢!

1 个答案:

答案 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