我使用numpy/scikit加载图像。我知道所有图像都是200x200像素。
当加载图像时,我注意到有些图像具有alpha通道,因此其形状为(200, 200, 4),而不是我预期的(200, 200, 3)。
是否有一种方法可以删除最后一个值,丢弃alpha通道并将所有图像转换为漂亮的(200, 200, 3)形状?
只需切片数组以获取最后一维的前三个条目:
image_without_alpha = image[:,:,:3]
scikit-image 内置:
from skimage.color import rgba2rgb
from skimage import data
img_rgba = data.logo()
img_rgb = rgba2rgb(img_rgba)
https://scikit-image.org/docs/dev/user_guide/transforming_image_data.html#conversion-from-rgba-to-rgb-removing-alpha-channel-through-alpha-blending
https://scikit-image.org/docs/dev/api/skimage.color.html#rgba2rgb
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)
img_RGB = cv2.cvtColor(img_RGBA, cv2.COLOR_RGBA2RGB);
它只花费了numpy切片方法的1/4时间。
Image.open(<image_path>)
,你可以通过执行Image.open(<image_path>).convert('RGB')
来丢弃 alpha 值。希望这能帮助未来的某个人。 - Pramesh Bajracharya