如何将3个通道的RGB PIL图像转换为numpy数组?
问题描述:
我加载图像用下面的代码如何将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]
为什么?
答
第四层是支持透明度的图像格式(如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]'。 – Divakar
第四层是alpha(即透明度)通道。你确定你不想要吗? –
@WarrenWeckesser我正在阅读JPEG,据我所知他们不包含阿尔法。 – Dims