scipy.misc imread returns 使用 flatten=True 读取 RGBA 图像时的二维零数组

scipy.misc imread returns 2d array of zeroes when reading RGBA image with flatten=True

我正在尝试从 RGBA 图像中获取具有灰度值的二维 numpy 数组。我使用的方法是 spicy.misc 中的 imread,但是每当我设置 mode='F'flatten=True 时,结果都是零矩阵。

我的代码:

img_mat = misc.imread(f, mode='F')

也试过

img_mat = misc.imread(f, flatten=True)

输出:

(278, 278)
[[ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]]

和图片:letter A

你的头像是"pure alpha"!图像的RGB分量全部为0;只有 alpha 通道具有非零值。显然,当底层图像库(PIL 或 Pillow)将 RGBA 图像转换为模式 'F' 时,它会忽略 alpha 通道,因此您最终得到一个零数组。

您可以读取 RGBA 数据,然后使用 alpha 通道作为您的扁平化图像,而不是在读取图像时展平图像:

img_data = imread(f)         # Read the RGBA image
img_mat = img_data[:, :, 3]  # Extract the alpha channel