2017-07-06 196 views
1

我加载图像用下面的代码如何将3个通道的RGB PIL图像转换为numpy数组?

image = PIL.Image.open(file_path) 
image = np.array(image) 

它的工作原理,但是阵列的大小似乎是(X, X, 4),即它具有4层。我想要正常的RGB图层。可能吗?

UPDATE

我发现,仅仅取消4通道unsufficcient。以下代码是必需的:

image = PIL.Image.open(file_path) 
image.thumbnail(resample_size) 
image = image.convert("RGB") 
image = np.asarray(image, dtype=np.float32)/255 
image = image[:, :, :3] 

为什么?

+2

只是夹到三个信道:'图像[...,:3]'。 – Divakar

+1

第四层是alpha(即透明度)通道。你确定你不想要吗? –

+0

@WarrenWeckesser我正在阅读JPEG,据我所知他们不包含阿尔法。 – Dims

回答

4

第四层是支持透明度的图像格式(如PNG)的透明度值。如果删除第四个值,它将成为没有透明度的正确的RGB图像。

编辑:

实施例:

>>> import PIL.Image 
>>> image = PIL.Image.open('../test.png') 
>>> import numpy as np 
>>> image = np.array(image) 
>>> image.shape 
(381, 538, 4) 
>>> image[...,:3].shape 
(381, 538, 3) 
+0

这会将形状'(64,64,4)'更改为'(22,64,4)' – Dims

+0

修复了@ Divakar正确示例的编辑。 – keredson

相关问题