有没有办法在现有变量上使用枕头“ Image.convert()”?

时间:2019-10-23 15:39:00

标签: python image python-imaging-library grayscale

你好

也许这个问题看起来很愚蠢,但是我尝试使用枕头Image.convert()将图像转换为灰度。我已经将该图像存储在变量img中,因为我已经对其进行了预处理,但是没有使用Pillow(类型:numpy.ndarray)。所以我输入:

img = Image.convert('LA')

但是它似乎不起作用,因为它说:

AttributeError: module 'PIL.Image' has no attribute 'convert'

如果我输入img = Image.open("picture.jpg").convert('LA')可以,但是我想在已经存在的变量上使用它。我也不想保存预处理的图像只是为了打开并使用上一个命令将其转换,因为这样效率更低(就速度和CPU功率而言)。 因此:有适当的方法吗?

谢谢您的帮助!

3 个答案:

答案 0 :(得分:0)

虽然您可以很好地将Numpy数组转换为PIL图像,然后将其转换为灰度,然后再转换回Numpy数组,如下所示:

PILImage = Image.fromarray(Numpyimg)
PILgrey  = PILImage.convert('L')
Numpygrey= np.array(PILgrey)

您也可以自行进行ITU-R 601-2亮度转换,即

L = 0.299 * Red + 0.587 * Green + 0.114 * Blue

因此,您将得到:

Numpygrey = np.dot(Numpyimg[...,:3], [0.299, 0.587, 0.114]).astype(np.uint8)

答案 1 :(得分:0)

您可以使用

img = Image.fromarray(img)

转换为PIL图像类型。从那里,您应该可以使用PIL的convert()函数

img = img.convert('LA')

然后,要直接访问像素值,您可以将其转换回一个numpy数组

img_array = np.asarray(img)

或使用来获得对PIL图像的像素访问

pixels = img.load()

答案 2 :(得分:0)

与其说Image.convert() 使用您的图片变量: img例如 img = img.convert('') 在这种情况下:

img = img.convert('LA')