2016-10-04 136 views
0

我有一個大的二維整數值列表。每個值代表一個像素,並且需要匹配一種顏色,但顯然相似的值需要具有相似的顏色。這裏列舉一個例子:如何在python中將二維列表保存爲圖像?

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 

「list」是一個4行的矩形,每行有6列。 0值需要匹配到無顏色,換句話說0值是透明顏色。我嘗試使用PIL,但我沒有獲得正確的結果。這裏的測試代碼:

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (4,6)) 
new.putdata(list) 
new.save('test.tif') 

回答

0

失敗的原因是在new.putdata(list),一個希望將序列對象(我想2D陣列不能算作一個序列對象)。

解決的辦法是將你的二維數組轉換成一維數組。如何做到這一點的一個例子是:

sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 

所以下面的代碼應能正常工作:

from PIL import Image 

list=[[0,10,3,9,23,0], [7,0,0,0,0,10], [12,1,2,7,11,12], [0,0,0,34,1,9]] 
new=Image.new("P", (6,4)) 
sequence = [list[x][y] for x in range(len(list)) for y in range(len(list[0]))] 
new.putdata(sequence) 
new.save('test.tif') 
+0

東西你的代碼錯誤。如果你看到結果'test.tif'是一個矩形4列沙6行。正確的結果應該是一個矩形6列和4行。 – lausent

+0

new = Image.new(「P」,(6,4))是正確的。無論如何還有另外一個問題,它是最大的問題。有了這個接近你有灰度色(從黑到白)。如何獲得其他顏色?我不知道這樣的事情:低值藍色,綠色後,黃色和紅色後爲高值(如漸變) – lausent