2016-08-23 36 views
1

我嘗試以下,期待看到源圖像的灰度版本:閱讀圖片爲灰度numpy的陣列,並將其保存回

from PIL import Image 
import numpy as np 
img = Image.open("img.png").convert('L') 
arr = np.array(img.getdata()) 
field = np.resize(arr, (img.size[1], img.size[0])) 
out = field 
img = Image.fromarray(out, mode='L') 
img.show() 

但由於某些原因,整個圖像是一個很值得很多與黑色之間的點。爲什麼會發生?

回答

2

當您使用Pillow對象的圖像數據創建numpy陣列時,請注意數組的默認精度爲int32。我假設你的數據實際上是uint8,因爲在實踐中看到的大多數圖像都是這種方式。因此,您必須明確確保該數組與您的映像中看到的類型相同。簡單地說,在獲得圖像數據後,確保數組爲uint8,這樣將成爲代碼中的第四行。我已經在開始時加入兩行代碼中的

arr = np.array(img.getdata(), dtype=np.uint8) # Note the dtype input 

1.注意導入必要的包此代碼工作(儘管圖像脫機)。

+0

否則numpy會將像素放入一個元素中? – RomaValcer

+0

並非如此。灰度值的動態範圍非常小,因此您看不到真實的圖像。另外,讀出的字節順序將是預期的綠色,藍色和alpha數據的4倍。 – rayryeng