Saltar al contenido

Obtenga RGB de píxeles usando PIL

Después de de nuestra extensa búsqueda de datos hemos podido solucionar este disgusto que suelen tener algunos lectores. Te compartimos la solución y deseamos que sea de mucha apoyo.

Solución:

Sí, de esta manera:

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)

La razón por la que estaba obteniendo un solo valor antes con pix[1, 1] se debe a que los píxeles GIF se refieren a uno de los 256 valores de la paleta de colores GIF.

Consulte también esta publicación de SO: valores de píxeles de Python y PIL diferentes para GIF y JPEG y esta página de referencia de PIL contiene más información sobre el convert() función.

Por cierto, su código funcionaría bien para .jpg imágenes

Los GIF almacenan colores como uno de x número de colores posibles en una paleta. Lea acerca de la paleta de colores gif limitada. Entonces, PIL le brinda el índice de paleta, en lugar de la información de color de ese color de paleta.

Editar: Se eliminó el enlace a una solución de publicación de blog que tenía un error tipográfico. Otras respuestas hacen lo mismo sin el error tipográfico.

Una alternativa a la conversión de la imagen es crear un índice RGB a partir de la paleta.

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)

Sección de Reseñas y Valoraciones

Si guardas algún enigma y capacidad de afinar nuestro enunciado te recomendamos realizar una observación y con deseo lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *