如何将 RGB PIL 图像转换为具有 3 个通道的 numpy 数组?



我正在使用以下代码加载图像

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

它可以工作,但数组的大小似乎(X, X, 4),即它有 4 层。我想要普通的 RGB 图层。可能吗?

更新

我发现仅删除第 4 个通道是不够的。需要以下代码:

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(的透明度值。 如果删除第 4 个值,它将是一个没有透明度的正确 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)

正如其他答案所提到的,一些图像使用第 4 个通道保存。 要加载仅具有RGB通道的图像而不使用numpy

from PIL import Image
image = Image.open('../test.png').convert('RGB')

最新更新