在 PIL 中,为什么 convert('L') 不转换图像灰度?

In PIL, why isn't convert('L') turning image grayscale?

对于我正在编写的程序,我需要将 RGB 图像转换为灰度图像并使用 PIL 将其作为 NumPy 数组读取。

但是当我 运行 以下代码时,它不会将图像转换为灰度,而是转换为奇怪的颜色失真,有点像热像仪的输出,如图所示。

知道问题出在哪里吗?

谢谢!

http://www.loadthegame.com/wp-content/uploads/2014/09/thermal-camera.png

from PIL import Image
from numpy import *
from pylab import *

im = array(Image.open('happygoat.jpg').convert("L"))

inverted = Image.fromarray(im)

imshow(inverted)
show()

matplotlib 的 imshow 旨在科学地表示数据 - 而不仅仅是图像数据。默认情况下,它配置为使用高对比度调色板。

您可以通过传递以下选项强制它使用灰度显示数据:

import matplotlib.cm
imshow(inverted, cmap=matplotlib.cm.Greys_r)

将此代码添加到 view/display 图像:

from PIL import Image;  
from numpy import *       
from pylab import *    

im = array(Image.open('happygoat.jpg').convert("L"));   

inverted = Image.fromarray(im);    
inverted