我有一张RGB图像,想将其转换为灰度图像,以便每个像素可以有一个数字(可能在0到1之间)。这会给我一个矩阵,其尺寸等于图像的像素尺寸。然后我想对此矩阵进行一些操作,并从这个操作过的矩阵生成一张新的灰度图像。我该怎么做?
我有一张RGB图像,想将其转换为灰度图像,以便每个像素可以有一个数字(可能在0到1之间)。这会给我一个矩阵,其尺寸等于图像的像素尺寸。然后我想对此矩阵进行一些操作,并从这个操作过的矩阵生成一张新的灰度图像。我该怎么做?
我经常使用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或简单地重新调整比例。
-Aldo
plt.imshow(y, cmap=plt.get_cmap('gray'))
来显示灰度图像。 - KY Lu
img[x,y]
访问像素。这不足够吗? - rayryeng