Guía básica de Procesamiento de imágenes con Python & Pillow

Procesamiento de Imagenes
¿Problemas de visión? En Tecsify nos importa la inclusión de personas con discapacidad, por eso, ahora puedes esuchar los articulos narrados en tiempo real

A medida que la tecnología avanza, cada día nos encontramos con miles de terabytes nuevos de información generada por la humanidad en su red más grande construida (internet), mucha de esta información viene en forma de imagenes, por lo que, hoy en día es casi indispensable entender su funcionamiento y como podemos agregar valor a la información dentro de ellas.

En está guía técnica básica te enseñaremos como utilizar el filtrado de imagenes con ‘Pillow‘, la biblioteca de imágenes de Python más adecuada para aplicaciones de procesamiento por lotes y archivos de imágenes, este paquete se puede utilizar para crear miniaturas, convertir de un formato a otro e imprimir imágenes, etc. ¡Es increíble! más adelante crearemos más guías con diferentes ejemplos de las features de esta maravillosa biblioteca.

Pillow (biblioteca de código abierto) - Wikipedia, la enciclopedia libre
Pillow es una biblioteca de Python que agrega soporte para abrir, manipular y guardar muchos formatos de archivo de imagen diferentes, es gratuita y de código abierto

Antes de empezar con el código (que ya sabemos que es por lo que vienes) veamos uno concepto básico que mejorará tu entendimiento sobre la temática.

¿Qué es el Procesamiento digital de imágenes?

Podemos definir de manera resumida El procesamiento de imágenes digitales como el conjunto de técnicas que se aplican a las imágenes digitales con el objetivo de mejorar la calidad o facilitar la búsqueda de información.

El procesamiento de imágenes tiene múltiples aplicaciones en distintos procesos tanto científicos como industriales o de operaciones, se usa en la medicina, inteligencia artificial, sector industrial, entre otros.

Procesamiento de imagenes aplicado a la radiografía de una rodilla

¿Qué es Pillow?

Pillow es una biblioteca adicional gratuita y de código abierto para Python que agrega soporte para abrir, manipular y guardar muchos formatos de archivo de imagen diferentes, está construido sobre PIL (Biblioteca de imágenes de Python), Esta librería es esencial para el procesamiento de imágenes con Python, admite la variabilidad de imágenes como jpeg, png, bmp, gif, ppm y tiff y Está disponible para Windows, Mac OS X y Linux.

¡Ahora sí! vamos con la guía de Python & Pillow!

Tambíen puede interesarte: Google Lighthouse: La herramienta definitiva para Análisis Web

Instalación de Pillow:

Antes de comenzar a trabajar con Python, necesitamos instalar la biblioteca de Pillow en nuestra computadora, podemos hacerlo escribiendo el siguiente comando en la terminal.

pip install pillow  

La imagén original que utilizaremos para todos los ejemplos será de cuando nos reunimos con el creador de Facebook, Marck Zuckerberg, cabe destacar que por muy real que parezca la foto, es un montaje, es decir, no es una foto real.

Imagen original que utilizaremos para cada uno de los ejemplos

Abriendo, Rotando y Mostrando una imagen:

Para nuestro primer ejemplo, veremos como abrir, rotar y mostrar una imagen, pon mucha atención a la parte de abrir y mostrar, pues te será útil en los próximos ejemplos.

Nota Importante: Te recomendamos utilizar una imagen formato .jpg para los ejemplos, debido a que es la imágen con más compatibilidad y otros formatos pueden presentar error por esta misma razón.

from PIL import Image #Importamos el modulo
img = Image.open(r'Directorio\Tecs.jpg') #Abrimos la imagen
nuevaimg = img.rotate(25) #Rotamos
nuevaimg.show() #Mostramos

En este ejemplo utilizaremos el método .rotate(25) que rotará la imagen en 25 grados, el grado de rotación puede cambiarse por el deseado. El resultado es el siguiente:

Imagen original rotada 25 grados

Cambiando secuencia de colores (RGB)

from PIL import Image
img = Image.open(r'Directorio\Tecsify.jpg')
r,g,b = img.split() #Obtenemos los canales RGB de la imagen
nuevaimg = Image.merge("RGB", (b, r, g)) #Cambiamos el orden de los canales
nuevaimg.show()

Aquí cambiamos el orden del R G B (Red, Green, Blue), el resultado es el siguiente:

Cambiando el R G B de la imagen original

Trabajando con Filtros

El método Image.filter() utilizará las técnicas de filtrado aplicado a las imágenes; veamos algunos ejemplos.

Nota Importante: Ahora debemos importar tambien el paquete ImageFilter de la librearía PIL.

from PIL import Image,ImageFilter #Ahora importamos 'ImageFilter" para los filtros
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.BLUR) #Filtro de Blur
nuevaimg.show()
img.filter(ImageFilter.BLUR)
from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.BoxBlur(50))  #Filtro de BoxBlur(50)
nuevaimg.show()
img.filter(ImageFilter.BoxBlur(50))
from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.CONTOUR)  #Filtro de CONTOUR
nuevaimg.show()
img.filter(ImageFilter.CONTOUR)
from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.EDGE_ENHANCE)  #Filtro de EDGE_ENHANCE
nuevaimg.show()
img.filter(ImageFilter.EDGE_ENHANCE)
from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.EMBOSS)  #Filtro de EMBOSS
nuevaimg.show()
img.filter(ImageFilter.EMBOSS)
from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.FIND_EDGES)  #Filtro de FIND_EDGES
nuevaimg.show()
img.filter(ImageFilter.FIND_EDGES)

Guardar los resultados en una nueva imagen:

Si te gustaron los resultados obtenidos en la imagen editada, puedes guardarla en un directorio y con un formato especifico con el método .save(), en este caso guardaremos el ultimo ejemplo donde utilizamos el filtro FIND_EDGES, por lo que nuestro código final quedaría así:

from PIL import Image,ImageFilter
img = Image.open(r'Directorio\Tecsify.jpg')
nuevaimg = img.filter(ImageFilter.FIND_EDGES)  #Filtro de FIND_EDGES
nuevaimg.save(r'Directorio\NuevaImagen.jpg') #Guardado en un directorio especifico

Si quieres saber más acerca de la librería Pillow puedes ver la documentación de la librería en el siguiente enlace: Documentación oficial de la librería de pillow

También, si te gusta este tipode contenido relacionado con códigos de programación te invitamos a echarle un vistzo a nuestra sección “Códigos Interactivos” para que te diviertas y aprendas de la mano de mini proyectos innteresantes: Visitar sección de Códigos Interactivos

¿Que te pareció nuestra guía básica de filtrado de imagenes? ¿Le agregarías algo? ¡Cuéntanos en los comentarios!

Oscar Morales Cuellar
Oscar Morales Cuellar es un Software Engineer, estratega de innovación tecnológica y conferencista internacional. Como CEO de Tecsify Latinoamérica, ha llevado la democratización de la tecnología, educación e innovación a más de 10 países, obteniendo múltiples reconocimientos internacionales y convirtiéndose en un referente global en empoderamiento y desarrollo tecnológico.