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")
# 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")
# 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")
# 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
- 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.).
- Tamaño de imagen: las dos imágenes que se operan deben tener las mismas dimensiones.
- Valor de retorno: todos los métodos devuelven un nuevo objeto Image, sin modificar la imagen original.
- Consideraciones de rendimiento: para imágenes grandes, estas operaciones pueden consumir bastante memoria.
- 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