在Python中将RGB图像转换为灰度并处理像素数据

12 投票
1 回答
50884 浏览
提问于 2025-04-18 07:57

我有一张RGB彩色图片,我想把它转换成灰度图像,这样每个像素就只有一个数字(可能在0到1之间)。这样我就能得到一个和图片像素大小一样的矩阵。接着,我想对这个矩阵进行一些操作,然后从这个处理过的矩阵生成一张新的灰度图像。我该怎么做呢?

1 个回答

17

我经常把图像当作NumPy数组来处理,做法是这样的:

import numpy as np
from PIL import Image

x=Image.open('im1.jpg','r')
x=x.convert('L') #makes it greyscale
y=np.asarray(x.getdata(),dtype=np.float64).reshape((x.size[1],x.size[0]))

<manipulate matrix y...>

y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255! 
w=Image.fromarray(y,mode='L')
w.save('out.jpg')

如果你处理完数组的值y后,发现它们不再在0到255的范围内,你可以选择使用16位的TIFF格式,或者直接重新调整一下数值的范围。

-阿尔多

撰写回答