Sử dụng Gối (hoạt động với Python 3.X cũng như Python 2.7+), bạn có thể thực hiện các thao tác sau:
from PIL import Image
im = Image.open('image.jpg', 'r')
width, height = im.size
pixel_values = list(im.getdata())
Bây giờ bạn có tất cả các giá trị pixel. Nếu nó là RGB hoặc chế độ khác có thể được đọc bởi im.mode. Sau đó, bạn có thể nhận pixel (x, y)bằng cách:
pixel_values[width*y+x]
Ngoài ra, bạn có thể sử dụng Numpy và định hình lại mảng:
>>> pixel_values = numpy.array(pixel_values).reshape((width, height, 3))
>>> x, y = 0, 1
>>> pixel_values[x][y]
[ 18 18 12]
Một giải pháp hoàn chỉnh, đơn giản để sử dụng là
# Third party modules
import numpy
from PIL import Image
def get_image(image_path):
"""Get a numpy array of an image so that one can access values[x][y]."""
image = Image.open(image_path, "r")
width, height = image.size
pixel_values = list(image.getdata())
if image.mode == "RGB":
channels = 3
elif image.mode == "L":
channels = 1
else:
print("Unknown mode: %s" % image.mode)
return None
pixel_values = numpy.array(pixel_values).reshape((width, height, channels))
return pixel_values
image = get_image("gradient.png")
print(image[0])
print(image.shape)
Khói kiểm tra mã
Bạn có thể không chắc chắn về thứ tự chiều rộng / chiều cao / kênh. Vì lý do này, tôi đã tạo gradient này:

Hình ảnh có chiều rộng 100px và chiều cao 26px. Nó có một dải màu đi từ #ffaa00(vàng) đến #ffffff(trắng). Đầu ra là:
[[255 172 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 172 5]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 4]
[255 172 5]
[255 171 5]
[255 171 5]
[255 172 5]]
(100, 26, 3)
Những điều cần lưu ý:
- Hình dạng là (chiều rộng, chiều cao, kênh)
- Hàng
image[0], do đó, hàng đầu tiên, có 26 bộ ba cùng màu