Procesamiento de imágenes en Python con Pillow: guía completa

La librería Python Imaging Library Pillow es ideal para procesamiento de imágenes. Típicamente, se usa para aplicaciones de archivado y procesamiento por lotes. Por supuesto, eres libre de usarla para lo que se te ocurra. Con la librería puedes:
- Crear miniaturas (thumbnails)
- Convertir entre formatos de archivo
- Imprimir imágenes
- Obtener un histograma (ideal para mejora automática de contraste)
- Rotar imágenes
- Aplicar filtros como desenfoque (blur)
Instalar el paquete de procesamiento de imágenes
Para instalar Pillow, que es un fork y continuación de la librería original Python Imaging Library, usa el comando pip install:
pip3 install Pillow
Procesar imágenes
Pillow ofrece varios filtros que se vuelven disponibles tras importar ImageFilter. Por ejemplo, para desenfocar una imagen, usa:
from PIL import Image, ImageFilter
im = Image.open("gatitos.jpg")
blurred = im.filter(ImageFilter.BLUR)
Otros filtros incluyen SHARPEN, SMOOTH y EDGE_ENHANCE. Para una lista completa, consulta la referencia de ImageFilter.
Para rotar una imagen 180 grados:
rotated_image = im.rotate(180)
Y finalmente, para guardar los resultados de tu trabajo:
rotated_image.save("rotada.jpg")
Mostrar imágenes
Además de procesamiento, esta librería también puede usarse para mostrar imágenes en pantalla. Aquí tienes código de ejemplo para mostrar un archivo llamado gatitos.jpg:
from PIL import Image
im = Image.open("gatitos.jpg")
im.show()
print(im.format, im.size, im.mode)
# JPEG (1920, 1357) RGB
En el siguiente GIF animado demuestro cómo usar Pillow directamente desde IPython:

Lecturas adicionales
La librería tiene mucho más que ofrecer. Para aprender todo sobre procesamiento de imágenes en Python usando Pillow, lo mejor es ir al tutorial oficial.
python
- Construya un robot con Raspberry Pi y Python: Guía completa
- Función print() en Python: Guía Práctica con Ejemplos
- Domine el Método strip() de Python: Guía Completa y Ejemplos Prácticos
- Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
- Domine el Formateo de Strings en Python con format(): Ejemplos Claros
- Domine el Método String.find() en Python: Sintaxis, Ejemplos y Alternativas
- Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
- Función round() en Python explicada con ejemplos prácticos
- Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
- Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
- Counter de collections en Python: conteo eficiente, actualización y operaciones aritméticas