在 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
对于我正在编写的程序,我需要将 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