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()获取像素值