2016-07-07 94 views
0

如何加載圖像的RGB矩陣。基本上,如果我有一個224x224圖像(灰度),我需要它的RGB矩陣,所以我想要一個由3個元素組成的224x224矩陣。我曾嘗試:PIL加載灰度圖像的RGB矩陣

f="/path/to/grayscale/image" 
image = Image.open(f) 
new_width = 224 
new_height = 224 
im = image.resize((new_width, new_height), Image.ANTIALIAS) 
im=np.array(im) 
print(im) 

和它打印:

[[195 195 195 ..., 101 104 105] 
[195 195 195 ..., 102 105 106] 
[194 194 194 ..., 104 109 111] 
..., 
[137 138 140 ..., 209 207 206] 
[133 134 136 ..., 209 207 206] 
[132 133 135 ..., 209 207 206]] 

一些測試後,我意識到,這是因爲圖像是灰度的。我如何加載灰度圖像的RGB矩陣?

+0

如果圖像是灰度級是灰度級,而不是RGB。沒有這樣的*「灰度圖像的RGB矩陣」*。但是,如果你想要**從你的灰度圖像**創建一個RGB圖像**,它很容易,只需重複矩陣3次,創建一個'NxMx3'np.array' –

+0

哦。謝謝!我怎樣才能做到這一點? – Sibi

+0

我很喜歡它,但首先:你爲什麼要這樣做?它可能會更好,繼續使用它作爲灰度 –

回答

2

我不熟悉PIL,但它看起來有一個image.Convert("RGB")方法可能或不可能工作,所以試試看。

但是,如果你的目的是繼續使用np.array那麼下面的工作:

im=np.array(im) 
imRGB = np.repeat(im[:, :, np.newaxis], 3, axis=2) 

它基本上重複輸入np.array到第3新中軸線,3倍。

imRGB[:,:,0]是紅色通道

imRGB[:,:,1]是綠色通道

imRGB[:,:,2]是藍色通道

+1

+1。不要太複雜,轉換成RGB然後讀取數據,期望你真的需要性能(即處理大量圖像)。 – allo

+2

,對於alpha通道,您可能不想複製灰度值。 – allo

+0

@Ander Biguri我需要它是這樣一個元組的矩陣:'[[[58] [12] [57 20 11] [60 23 14] ...]] ''np.repeat' doesn' t做到這一點 – Sibi