Получить пиксель RGB с помощью PIL

Можно ли получить цвет RGB пикселя с помощью PIL? Я использую этот код:

im = Image.open("image.gif")
pix = im.load()
print(pix[1,1])

Однако он выводит только число (например,0 или же1), а не три числа (например,60,60,60 для R, G, B). Я полагаю, что я не понимаю что-то о функции. Я хотел бы получить некоторые объяснения.

Большое спасибо.

Ответы на вопрос(4)

Решение Вопроса

im = Image.open('image.gif')
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((1, 1))

print(r, g, b)
(65, 100, 137)

Причина, по которой вы получали одно значение раньшеpix[1, 1] потому что пиксели GIF ссылаются на одно из 256 значений в цветовой палитре GIF.

Смотрите также этот пост:Значения пикселей Python и PIL различны для GIF и JPEG и этоPIL Справочная страница  содержит больше информации оconvert() функция.

Кстати, ваш код будет работать нормально.jpg изображений.

 24 нояб. 2017 г., 19:22
@NimaBavari На основе 0.
 01 янв. 2018 г., 12:40
Он отлично работает и для файлов png.
 28 апр. 2016 г., 20:04
Можно ли это сделать для экрана компьютера, а не только для файла изображения?
 06 нояб. 2017 г., 03:39
Является ли Image.getpixel () 0 или 1? Я имею в виду, самый левый верхний пиксель (0,0) или (1, 1)?

из палитры.

from PIL import Image

def chunk(seq, size, groupByList=True):
    """Returns list of lists/tuples broken up by size input"""
    func = tuple
    if groupByList:
        func = list
    return [func(seq[i:i + size]) for i in range(0, len(seq), size)]


def getPaletteInRgb(img):
    """
    Returns list of RGB tuples found in the image palette
    :type img: Image.Image
    :rtype: list[tuple]
    """
    assert img.mode == 'P', "image should be palette mode"
    pal = img.getpalette()
    colors = chunk(pal, 3, False)
    return colors

# Usage
im = Image.open("image.gif")
pal = getPalletteInRgb(im)

scipy.misc.imread еще может быть интересно

import scipy.misc
im = scipy.misc.imread('um_000000.png', flatten=False, mode='RGB')
print(im.shape)

дает

(480, 640, 3)

так оно и есть (высота, ширина, каналы). Таким образом, пиксель в положении(x, y) является

color = tuple(im[y][x])
r, g, b = color

Читайте оGIF ограниченная цветовая палитра, Таким образом, PIL предоставляет вам индекс палитры, а не информацию о цвете этого цвета палитры.

Edit: Удалена ссылка на сообщение в блоге, в котором была опечатка. Другие ответы делают то же самое без опечатки.

Ваш ответ на вопрос