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

Python 有没有办法使用枕头;Image.convert();在现有变量上?,python,image,python-imaging-library,grayscale,Python,Image,Python Imaging Library,Grayscale,你好, 也许这个问题看起来很愚蠢,但我尝试使用枕头Image.convert()将图像转换为灰度。我将此图像存储在变量img中,因为我已经对其进行了预处理,但没有使用枕头(类型:numpy.ndarray)。所以我键入: img = Image.convert('LA') 但它似乎不起作用,正如它所说: AttributeError: module 'PIL.Image' has no attribute 'convert' 如果我键入img=Image.open(“picture.jpg”

你好,

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

img = Image.convert('LA')
但它似乎不起作用,正如它所说:

AttributeError: module 'PIL.Image' has no attribute 'convert'
如果我键入
img=Image.open(“picture.jpg”).convert('LA')
,它可以工作,但我想在已经存在的变量上使用它。我也不想保存预处理后的图像,只是为了用前面的命令打开和转换它,因为这样做效率更低(在速度和CPU功率方面)。 那么:有没有合适的方法来做到这一点


提前谢谢你的帮助

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

PILImage = Image.fromarray(Numpyimg)
PILgrey  = PILImage.convert('L')
Numpygrey= np.array(PILgrey)
您也可以自己进行ITU-R601-2 luma变换,即

L = 0.299 * Red + 0.587 * Green + 0.114 * Blue
因此,您将得到:

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

img=Image.fromarray(img)
转换为PIL图像类型。从那里,您应该能够使用PIL的
convert()
函数

img=img.convert('LA'))
然后,要直接访问像素值,可以将其转换回numpy数组

img_数组=np.asarray(img)
或者使用获取PIL图像的像素访问权限

pixels=img.load()

而不是说
Image.convert()
使用图像变量: 例如
img=img.convert(“”)
在这种情况下:


img=img.convert('LA')

您是否尝试过
img=img.convert('LA')
?您可能需要也可能不需要首先使用
img=Image.fromarray(img)
将numpy数组转换为PIL图像?“转换为灰度后,你打算对图像做什么?”LampToast是的,我也试过,但它说“img”没有“convert”属性。所以这也不起作用。如果我使用转换
img=Image.fromarray(img)
,它存储的格式是什么?我是否可以像在numpy数组中一样访问单个像素的值,例如
img[1][1]
?@MarkSetchell形状是(35,64,3)。因此,一张64x35的图片有3个颜色通道。在转换之后,我为每个像素排除了一个灰度值,所以它将是(35,64,1),甚至只是二维的。我需要访问每个像素的这些值,例如通过索引(
img[0][0]
将是第一个像素)@Totemi1324(如果使用
Image)。从数组(img)
它将成为PIL图像。灰度转换后,您可以使用
img=np.asarray(img)
简单地转换回numpy数组,或者通过
px=img.load()获取像素值