如下图所示,有一个bmp图像,其信息列表如下图所示。但是当在IPython-notebook上使用matplotlib的plt.imshow()函数显示时,它的颜色错误,正如第三张图片所示。那么我能知道原因吗? 谢谢!
原始文件已在dropbox https://dl.dropboxusercontent.com/u/26518813/test2.bmp
分享在IPython-notebook上显示图像的代码是:
%pylab inline --no-import-all
from PIL import Image
plt.imshow(Image.open("./test/test2.bmp"))
答案 0 :(得分:6)
这是因为您实际上是使用matplotlib.pyplot将图像绘制为矩阵。 Matplotlib本身不支持.bmp
因此我认为默认cmap存在一些错误。在您的特定情况下,您有一个灰度图像。因此,实际上您可以使用cmap="gray"
将颜色贴图更改为灰度。
from PIL import Image
img= Image.open(r'./test/test2.bmp')
plt.imshow(img,cmap='gray',vmin=0,vmax=255)
请注意,如果要重现原始图像的相同亮度,则必须设置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 Notebook,则图像会显示在新的外部窗口中
另一种选择是将图像模式更改为'P'
(调色板编码:每个像素一个字节,使用ImagePalette类的调色板将像素转换为颜色)。使用.convert
,然后使用matplotlib plt.imshow
绘制图像:
convertedimg=img.convert('P')
plt.imshow(convertedimg)