Módulo Pillow ImageChops

ImageChops es un submódulo de Python PIL (Python Imaging Library), especializado en operaciones de canales de imagen (abreviatura de "Channel Operations").

El módulo ImageChops ofrece una serie de métodos que permiten realizar operaciones matemáticas y lógicas en imágenes, utilizados a menudo en escenarios como composición de imágenes y procesamiento de efectos especiales.

Características del módulo

  • Todos los métodos aceptan dos imágenes como parámetros y operan sobre sus píxeles correspondientes.
  • Devuelve un nuevo objeto de imagen.
  • La mayoría de los métodos requieren que las imágenes de entrada tengan el mismo tamaño y modo.
  • Es especialmente adecuado para la composición, mezcla y procesamiento de efectos especiales de imágenes.

Métodos comunes de ImageChops

A continuación se muestran los métodos más utilizados del módulo ImageChops y sus descripciones funcionales:

Nombre del método Descripción funcional Expresión matemática
add(image1, image2, scale=1.0, offset=0) Suma dos imágenes. out = ((image1 + image2) / scale + offset)
subtract(image1, image2, scale=1.0, offset=0) Resta dos imágenes. out = ((image1 - image2) / scale + offset)
lighter(image1, image2) Compara dos imágenes y toma el valor más brillante de cada píxel. out = max(image1, image2)
darker(image1, image2) Compara dos imágenes y toma el valor más oscuro de cada píxel. out = min(image1, image2)
multiply(image1, image2) Multiplica dos imágenes. out = image1 * image2 / 255
screen(image1, image2) Aplica el modo de fusión de pantalla (screen) a dos imágenes. out = 255 - (255 - image1) * (255 - image2) / 255
overlay(image1, image2) Superpone dos imágenes. Selecciona la operación multiply o screen según el valor del píxel.
difference(image1, image2) Devuelve la diferencia absoluta entre dos imágenes. out = abs(image1 - image2)
invert(image) Invierte la imagen (efecto negativo). out = 255 - image
logical_and(image1, image2) Realiza la operación lógica AND entre dos imágenes. out = image1 & image2
logical_or(image1, image2) Realiza la operación lógica OR entre dos imágenes. out = image1 | image2
logical_xor(image1, image2) Realiza la operación lógica XOR entre dos imágenes. out = image1 ^ image2
blend(image1, image2, alpha) Mezcla dos imágenes con una transparencia fija. out = image1 * (1.0 - alpha) + image2 * alpha
composite(image1, image2, mask) Compone dos imágenes usando una imagen de máscara. Selecciona los píxeles de image1 o image2 según la máscara.
offset(image, xoffset, yoffset=None) Desplazar imagen. Desplaza la imagen una cantidad especificada de píxeles en las direcciones x e y.

Ejemplos de uso

Uso básico

Ejemplo

from PIL import Image, ImageChops

# Abrir dos imágenes
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")

# Asegurar que ambas imágenes tengan el mismo tamaño
if image1.size == image2.size:
    # Sumar las dos imágenes
    added_image = ImageChops.add(image1, image2)
    added_image.save("added.jpg")
   
    # Obtener la diferencia entre las dos imágenes
    diff_image = ImageChops.difference(image1, image2)
    diff_image.save("difference.jpg")

Crear negativo de imagen

Ejemplo

from PIL import Image, ImageChops

# Abrir la imagen
original = Image.open("photo.jpg")

# Crear el negativo
inverted = ImageChops.invert(original)
inverted.save("negative.jpg")

Mezcla de imágenes

Ejemplo

from PIL import Image, ImageChops

# Abrir dos imágenes
foreground = Image.open("foreground.png")
background = Image.open("background.jpg")

# Asegurar que los tamaños sean iguales
if foreground.size == background.size:
    # Mezclar imágenes (alpha=0.5 significa 50% cada una)
    blended = ImageChops.blend(foreground, background, 0.5)
    blended.save("blended.jpg")

Notas importantes

  1. Modo de imagen: la mayoría de los métodos de ImageChops requieren que las imágenes de entrada tengan el mismo modo (como RGB, L, etc.).
  2. Tamaño de imagen: las dos imágenes que se operan deben tener las mismas dimensiones.
  3. Valor de retorno: todos los métodos devuelven un nuevo objeto Image, sin modificar la imagen original.
  4. Consideraciones de rendimiento: para imágenes grandes, estas operaciones pueden consumir bastante memoria.
  5. Modos especiales: algunos métodos (como las operaciones lógicas) se utilizan normalmente para imágenes de 1 bit (modo "1").

Con un uso adecuado del módulo ImageChops, puede implementar fácilmente diversos efectos de procesamiento de imágenes, desde la composición simple de imágenes hasta el procesamiento complejo de efectos especiales.

Otras extensiones