Python 如何将RGB PIL图像转换为具有3个通道的numpy阵列?

Python 如何将RGB PIL图像转换为具有3个通道的numpy阵列?,python,numpy,python-imaging-library,rgb,Python,Numpy,Python Imaging Library,Rgb,我正在加载带有以下代码的图像 image = PIL.Image.open(file_path) image = np.array(image) 它可以工作,但数组的大小似乎是(X,X,4),即它有4层。我想正常的RGB层。可能吗 更新 我发现仅仅删除第四频道是不合适的。需要以下代码: image = PIL.Image.open(file_path) image.thumbnail(resample_size) image = image.convert("RGB") image = np.

我正在加载带有以下代码的图像

image = PIL.Image.open(file_path)
image = np.array(image)
它可以工作,但数组的大小似乎是
(X,X,4)
,即它有4层。我想正常的RGB层。可能吗

更新

我发现仅仅删除第四频道是不合适的。需要以下代码:

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]

为什么?

第四层是支持透明度的图像格式(如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)

只需剪辑到三个通道:
图像[…,:3]
。第四层是alpha(即透明度)通道。你确定你不想要吗?@WarrenWeckesser我正在阅读JPEG,据我所知,它们不包含alpha。当我使用
np.asarray(my_pil_img).shape
时,它会在没有alpha的480x640.png图像上返回
(480,640,3)
。这是自本帖发布后在更高版本中被“修复”的吗?这将形状
(64,64,4)
更改为
(22,64,4)
由于@Divakar的正确示例,修复了编辑。