gpt4 book ai didi

python - 无法正确打开带枕头的透明图像

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:15 25 4
gpt4 key购买 nike

我想使用 PIL.Image.open() 打开彩色图像并将其转换为 numpy 数组以供进一步分析。

我正在使用的图像可以下载here .

我已经成功地在 Jupyter Notebook 中打开图像并以全彩显示,没有任何问题,但是一旦我使用 getpixel 方法,或者使用 numpy 将其转换为数组,就会出现问题。

from PIL import Image
t = Image.open('radar.png')
display(t)

到目前为止效果很好,图像的透明部分在屏幕上显示为白色。

t.show() 

第一个意外行为,在文件查看器中打开时,透明部分已替换为全黑色。颜色仍然可以正确看到。

t.getpixel((200, 200)) 

248

第二个意外行为,我本来希望看到一个元组,但它只是一个数字。

import numpy as np
im2arr = np.asarray(t)
im2arr.shape

(512, 512)

第三个意外行为,期望获得一个三维数组。

arr2im = Image.fromarray(im2arr)
display(arr2im)

第四个意外行为,图像现在显示为黑色或白色(不是灰度)。应该透明的地方是黑色的,应该有颜色的地方是白色的。

我怀疑 PIL.Image 在第一次打开图像时受到了某种欺骗,因为第一个像素是透明的或丢失的?它不注册为 RGBA 格式。我已经尝试了与在 Paint 中创建的全彩 png 相同的代码,并且它全部显示正确,包括 3 维 numpy 数组。

最佳答案

您的图像是“调色板 Alpha”图像。这意味着,它没有 RGBA channel ,而是只有一个 channel ,并且为每个像素存储一个 8 位索引。该索引在 256 种颜色的调色板中查找 RGBA 值。

您可以打开它并获得您所期望的结果,如下所示,它将每个索引转换为 RGBA 值:

im = Image.open('weather.png').convert('RGBA')

现在如果转换为Numpy数组,你将得到4个 channel ,即RGBA:

n = np.array(im)
print(n.shape) # prints (512,512,4)

我对调色板图像做了更详细的解释here .

关于python - 无法正确打开带枕头的透明图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com