为什么IPython笔记本电脑上matplotlib的plt.imshow将bmp图像显示为错误颜色?

为什么IPython笔记本电脑上matplotlib的plt.imshow将bmp图像显示为错误颜色?,matplotlib,ipython-notebook,Matplotlib,Ipython Notebook,有一个bmp图像,如下面的第一个图片所示,其信息列表如下面的第二个图片所示。但在IPython笔记本电脑上使用matplotlib的plt.imshow()函数显示时,颜色错误,如下面第三张图片所示。我能知道原因吗? 谢谢 原始文件已在dropbox上共享 在IPython笔记本上显示图像的代码是: %pylab inline --no-import-all from PIL import Image plt.imshow(Image.open("./test/test2.bmp"))

有一个bmp图像,如下面的第一个图片所示,其信息列表如下面的第二个图片所示。但在IPython笔记本电脑上使用matplotlib的plt.imshow()函数显示时,颜色错误,如下面第三张图片所示。我能知道原因吗?
谢谢


原始文件已在dropbox上共享

在IPython笔记本上显示图像的代码是:

%pylab inline --no-import-all
from PIL import Image
plt.imshow(Image.open("./test/test2.bmp")) 

发生这种情况的原因是,您实际上正在使用matplotlib.pyplot将图像打印为矩阵。Matplotlib本机不支持
.bmp
,因此我认为默认cmap存在一些错误。在您的特定情况下,您有一个灰度图像。因此,实际上,您可以使用
cmap=“gray”
将颜色贴图更改为灰度

注意,如果要再现原始图像的相同亮度,必须设置vmin和vmax,否则我认为python在默认情况下会拉伸到最小最大值。 这是一个不导入PIL的解决方案:

img=matplotlib.image.imread(r'/Users/giacomo/Downloads/test2.bmp')
plt.imshow(img,cmap='gray',vmin=0,vmax=255)
或者,您可以使用PIL显示图像,也可以将图像转换为
.png
格式

如果要使用
PIL.image
显示图像,可以使用以下方法:

from PIL import Image
img= Image.open( r'./test/test2.bmp')
img.show()
注意:如果您使用的是I-Python笔记本,则图像将显示在新的外部窗口中

另一个选项是将图像的模式更改为
'p'
(调色板编码:每像素一个字节,使用ImagePalette类调色板将像素转换为颜色)。使用
.convert
,然后使用matplotlib
plt.imshow
打印图像:

convertedimg=img.convert('P')
plt.imshow(convertedimg)

您能将原始的.bmp和所有代码包括在内吗?因此,我们可以下载并试用它…@GM文件和代码已粘贴在上面。在我的IPython笔记本上,img.show()无法在浏览器上显示任何内容。但图像失真。谢谢@Wu这不是我的情况(见图)您使用的浏览器和操作系统是什么?您尝试过PythonShell吗?发生了什么?Ubuntu服务器以IPython笔记本作为后端运行。谢谢。@Honghe.Wu我已经添加了我找到的最后一个解决方案,希望它能有所帮助!非常感谢。好问题,我希望有人能补充一些信息。
convertedimg=img.convert('P')
plt.imshow(convertedimg)