如何在不使用numpy的情况下获取图像的像素矩阵?

时间:2017-01-29 19:54:24

标签: image python-2.7 numpy matrix python-imaging-library

我想找到一种在不使用numpy的情况下获取像素矩阵的方法。我知道使用代码

from PIL import Image  

import numpty as np  

img = Image.open('example.png', 'r')  

pixels = np.array(img)

pixels获取图像的像素矩阵。但是,我想在不使用numpy包的情况下找到一种不使用numpy来获取像素图像的方法。提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Image方法getdata(band=None)getpixel(xy)

In [1]: from PIL import Image

In [2]: im = Image.open('block.png', 'r')

In [3]: data = list(im.getdata())

In [4]: data[:20]
Out[4]: 
[(0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (144, 33, 33),
 (144, 33, 33),
 (144, 33, 33),
 (144, 33, 33),
 (255, 255, 255),
 (255, 255, 255),
 (255, 255, 255),
 (255, 255, 255),
 (0, 0, 0)]

In [5]: pxl = im.getpixel((1, 1))

In [6]: pxl
Out[6]: (144, 33, 33)

要将getdata()返回的序列转换为列表列表,您可以使用列表解析:

In [61]: data2d = [data[i:i+im.width] for i in range(0, len(data), im.width)]

In [62]: data2d[0]  # row 0
Out[62]: 
[(0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0),
 (0, 0, 0)]

In [63]: data2d[1]  # row 1
Out[63]: 
[(0, 0, 0),
 (144, 33, 33),
 (144, 33, 33),
 (144, 33, 33),
 (144, 33, 33),
 (255, 255, 255),
 (255, 255, 255),
 (255, 255, 255),
 (255, 255, 255),
 (0, 0, 0)]

In [64]: data2d[1][1]
Out[64]: (144, 33, 33)