将图像转换为numpy数组,然后立即将其转换回图像会产生两种不同的结果

2024-03-29 11:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题所述,我正在将图像转换为numpy数组,然后再将其转换回来。这是我的密码:

import os
import numpy as np
from PIL import Image
img = Image.open(os.path.join(no_black_border, png_files[0]))
img.show()

np_arr = np.asarray(img)
img1 = Image.fromarray(np_arr)
img1.show()

这是我的before converting it 这是我的after converting it back


Tags: 图像imageimportnumpy密码标题imgos
1条回答
网友
1楼 · 发布于 2024-03-29 11:54:52

您的图像不是RGB,而是调色板图像。这意味着它不是在每个像素位置都有一个红、绿和蓝的值,而是在每个位置都有一个8位的调色板索引,PIL使用它来了解颜色。转换为Numpy数组时将丢失调色板。你知道吗

你有两个选择。你知道吗

或者在打开图像时将其转换为RGB,所有3个值都将带到Numpy:

# Load image and make RGB
im = Image.open(...).convert('RGB')

# Convert to Numpy array and process
numpyarray = np.array(im)

或者,按当前操作,但在转换回PIL图像后从原始图像重新应用调色板:

# Load image
im = Image.open()

# Convert to Numpy array
numpyarray = np.array(im)

... do Numpy stuff ...

# Convert back to PIL Image and re-apply original palette
r = Image.fromarray(numpyarray,mode='P') 
r.putpalette(im.getpalette())

# Optionally save
r.save('result.png')

参见答案here和附带的评论。你知道吗

相关问题 更多 >