如何在不使用 numpy 的情况下获取图像的像素矩阵?
How can I get the pixels matrix of an image without using numpy?
我想找到一种无需使用 numpy
即可获取像素矩阵的方法。我知道使用代码
from PIL import Image
import numpty as np
img = Image.open('example.png', 'r')
pixels = np.array(img)
pixels
获取图像的像素矩阵。但是,我想找到一种不使用 numpy
来获取像素图像而不使用包 numpy
的方法。提前致谢!
您可以使用 Image
方法 getdata(band=None)
or 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)
我想找到一种无需使用 numpy
即可获取像素矩阵的方法。我知道使用代码
from PIL import Image
import numpty as np
img = Image.open('example.png', 'r')
pixels = np.array(img)
pixels
获取图像的像素矩阵。但是,我想找到一种不使用 numpy
来获取像素图像而不使用包 numpy
的方法。提前致谢!
您可以使用 Image
方法 getdata(band=None)
or 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)