Numpy 使用plt.imshow()时,png文件显示蓝色图像

Numpy 使用plt.imshow()时,png文件显示蓝色图像,numpy,matplotlib,image-processing,python-imaging-library,Numpy,Matplotlib,Image Processing,Python Imaging Library,我试图使用matplotlib.pyplot.imshow()打印png文件,但它显示的是蓝色图像(见下文)。它适用于jpeg文件,但不适用于png 代码如下: import matplotlib.pyplot as plt import numpy as np from PIL import Image im = Image.open('apple_logo.png') im.save('test.png') #test.png is same as original data = np.ar

我试图使用
matplotlib.pyplot.imshow()
打印png文件,但它显示的是蓝色图像(见下文)。它适用于jpeg文件,但不适用于png

代码如下:

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
im = Image.open('apple_logo.png')
im.save('test.png') #test.png is same as original
data = np.array(im)
print(data) 
plt.imshow(data) #shows a bluish image of the logo
我正在使用的图像:

蓝色图像:

Python 3.8.2
matplotlib 3.3.0
枕头7.2.0
numpy 1.19.0

OS:Windows 10

原始PNG图像是一个索引PNG文件。也就是说,它有一个调色板(即颜色的查找表),组成图像的数据数组是查找表的索引数组。将
im
转换为具有
data=np.array(im)
的numpy数组时,
data
是调色板中的索引数组,而不是实际颜色数组

在将图像通过
numpy.array
之前,请使用以下方法:

data = np.array(im.convert())

谢谢成功了。但是你能告诉我png文件的数组如何存储哪个像素是透明的吗?因为当我执行
打印(数据)
时,数组只包含3个元素的数组,如
[255]
仅用于与jpg文件相同的rgb颜色。