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

时间:2020-07-19 17:33:21

标签: 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.array(im)
print(data) 
plt.imshow(data) #shows a bluish image of the logo

我正在使用的图像:

apple_logo image i'm using

蓝色图像:

bluish image of the apple_logo

Python 3.8.2
matplotlib 3.3.0
枕头7.2.0
numpy 1.19.0
操作系统:Windows 10

1 个答案:

答案 0 :(得分:1)

原始PNG图像是索引的PNG文件。即,它具有调色板(即,用于颜色的查找表),并且构成图像的数据阵列是指向该查找表的索引的阵列。当您将im转换为具有data = np.array(im)的numpy数组时,data是调色板中的索引数组,而不是实际颜色的数组。

在通过numpy.array传递图像之前,请使用convert()方法:

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