2017-06-13 56 views
1

我試圖與(0,10)值的numpy的數組轉換成1通道彩色圖像轉換陣列1通道圖像與P模式

實施例:

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 

謝謝!

回答

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