将存储为Numpy数组的图像中的alpha通道丢弃

50

我使用numpy/scikit加载图像。我知道所有图像都是200x200像素。

当加载图像时,我注意到有些图像具有alpha通道,因此其形状为(200, 200, 4),而不是我预期的(200, 200, 3)。

是否有一种方法可以删除最后一个值,丢弃alpha通道并将所有图像转换为漂亮的(200, 200, 3)形状?


11
假设你正在使用 Image.open(<image_path>),你可以通过执行 Image.open(<image_path>).convert('RGB') 来丢弃 alpha 值。希望这能帮助未来的某个人。 - Pramesh Bajracharya
4个回答

125

只需切片数组以获取最后一维的前三个条目:

image_without_alpha = image[:,:,:3]

我认为这会降低图像的质量? - Aleksandar Jovanovic
21
你是否确切地知道“图像质量”所指的是什么?去掉阿尔法通道会丢失关于像素透明度的信息,但不会影响其他信息(例如颜色)。 - dolphin


2
使用 PIL.Image 来移除 alpha 通道。
from PIL import Image
import numpy as np

img = Image.open("c:\>path_to_image")
img = img.convert("RGB") # remove alpha
image_array = np.asarray(img) # converting image to numpy array
print(image_array.shape)
img.show()

如果图像以 numpy 数组的形式存在,可以使用 Image.fromarray 将数组转换为 Image
pilImage = Image.fromarray(numpy_array)

2
如果您需要更高的速度,可以使用cv2(openCV)中的cvtColor:
img_RGB = cv2.cvtColor(img_RGBA, cv2.COLOR_RGBA2RGB);

它只花费了numpy切片方法的1/4时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接