【问题标题】:png file shows bluish image when using plt.imshow()png 文件在使用 plt.imshow() 时显示蓝色图像
【发布时间】:2020-11-09 00:10:00
【问题描述】:

我正在尝试使用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
操作系统:Windows 10

【问题讨论】:

    标签: numpy matplotlib image-processing python-imaging-library


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!有效。但是你能告诉我 png 文件的数组如何存储哪个像素是透明的吗?因为当我执行print(data) 时,该数组包含只有 3 个元素的数组,例如 [255 255 255],仅适用于与 jpg 文件相同的 rgb 颜色。
    猜你喜欢
    • 2019-07-24
    • 2017-05-07
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2018-05-16
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多