在Python中将RGB图像转换为灰度并处理像素数据
我有一张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格式,或者直接重新调整一下数值的范围。
-阿尔多