2016-07-07 96 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