Volver al catálogo
Season 31 5 Episodios 22 min 2026

Pillow: The Imaging Library

v12.1 — Edición 2026. Una guía concisa sobre el uso de Pillow para el procesamiento de imágenes y cómo se integra en proyectos más amplios de IA y machine learning (v12.1 - 2026).

Procesamiento de imágenes Python Core
Pillow: The Imaging Library
Reproduciendo ahora
Click play to start
0:00
0:00
1
La puerta de enlace de visión: Lazy loading y metadatos
Exploramos la clase Image de Pillow y cómo actúa como puerta de enlace para tu conjunto de datos de visión artificial. Aprenderás a abrir imágenes y extraer metadatos al instante utilizando lazy loading.
4m 32s
2
Estandarizando tensores: Modos de imagen y conversiones
Comprender los modos de imagen es fundamental antes de introducir datos en una red neuronal. Desglosamos la diferencia entre los canales Grayscale, RGB y RGBA, y cómo utilizar el método convert para estandarizar tus entradas.
4m 47s
3
Geometría para modelos: Redimensionado, recorte y relleno
Abordamos el problema de remodelar imágenes para entradas de modelos de tamaño estricto. Aprenderás la diferencia entre aplastar una imagen con resize, recortarla con fit y añadir márgenes con pad.
4m 25s
4
El puente de arrays: Moviendo píxeles a PyTorch
Pillow actúa como puente entre los archivos de imagen en bruto y los arrays matemáticos. Cubrimos cómo traducir imágenes a tensores de NumPy y formatos de PyArrow, y cómo convertir las salidas del modelo de nuevo en imágenes visibles.
4m 41s
5
Aumento de datos ligero: El módulo ImageOps
No siempre necesitas bibliotecas pesadas para aumentar tu conjunto de datos. Exploramos el módulo ImageOps de Pillow para reflejar, voltear y ajustar el contraste fácilmente con el fin de expandir artificialmente tus datos de entrenamiento.
3m 57s

Episodios

1

La puerta de enlace de visión: Lazy loading y metadatos

4m 32s

Exploramos la clase Image de Pillow y cómo actúa como puerta de enlace para tu conjunto de datos de visión artificial. Aprenderás a abrir imágenes y extraer metadatos al instante utilizando lazy loading.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Pillow: The Imaging Library, episodio 1 de 5. Puedes escanear un dataset de un millón de imágenes en segundos sin reventar tu memoria. El secreto es que tu librería no carga realmente los datos de los píxeles hasta el último momento posible. The Vision Gateway: Lazy Loading y Metadata es el mecanismo que hace posible manejar directorios de imágenes masivos. Cuando construyes un dataset de IA, a menudo empiezas con un web scrape sin filtrar. Te encuentras mirando un directorio de millones de archivos desconocidos. Necesitas filtrarlos antes del training. Supongamos que tu modelo requiere imágenes de exactamente 512 por 512 píxeles, guardadas como JPEGs, a todo color. Un error común es pensar que abrir un archivo de imagen dentro de un script cargará cada píxel en memoria de inmediato. Si eso fuera cierto, escanear un millón de imágenes en alta resolución consumiría cantidades masivas de RAM y acabaría crasheando tu máquina. En su lugar, Pillow maneja esto usando un concepto llamado lazy loading. El punto de entrada para leer una imagen en Pillow es la función open, ubicada en el módulo Image. Le pasas a esta función un file path, y te devuelve un objeto Image. Aquí está la clave. Llamar a la función open no decodifica los datos raster. Solo abre el archivo en disco y lee el header del archivo. El header contiene justo la información necesaria para identificar el archivo y entender su geometría básica. El trabajo pesado real de descomprimir y mapear los datos de los píxeles se pospone. Como Pillow lee el header inmediatamente, tu script obtiene acceso instantáneo a la metadata de la imagen. Esta metadata se almacena como atributos en el objeto Image. Hay tres atributos principales que usarás para evaluar archivos. El primero es el atributo format. Este identifica el tipo de archivo de origen, devolviendo un string como JPEG o PNG. El segundo es el atributo size. Este devuelve una tuple de dos elementos que contiene el ancho y el alto de la imagen en píxeles. El tercero es el atributo mode. El mode define el número y los nombres de las bandas de píxeles en la imagen, como RGB para color estándar, RGBA para color con transparencia, o la letra L para escala de grises. Con estos tres atributos, nuestro data engineer puede procesar ese web scrape masivo de forma segura. Escribe un loop que llama a la función open en cada archivo del directorio. El script comprueba la metadata. ¿El format es igual a JPEG? ¿El size es igual a 512 por 512? ¿El mode es igual a RGB? Si el archivo falla cualquiera de estas comprobaciones, el script lo ignora y pasa al siguiente. Pillow deja los datos de los píxeles completamente intactos durante todo este proceso. Los datos raster solo se decodifican y se cargan en memoria si tu código finalmente llama a un método que le obligue a actuar sobre los píxeles, como recortar la imagen o aplicar un filtro visual. Para los cientos de miles de imágenes incorrectas en el directorio, esa extracción de píxeles nunca ocurre. El memory footprint se mantiene diminuto. Tu script procesa el directorio tan rápido como tu unidad de almacenamiento pueda leer esos pequeños headers de archivo. El lazy loading transforma la función open de una operación de renderizado pesada a un escáner de metadata altamente eficiente, manteniendo tus data pipelines rápidos y tu uso de memoria plano. Si te gustaría apoyar el programa, puedes buscar DevStoriesEU en Patreon. Eso es todo por este episodio. Gracias por escuchar, y ¡sigue construyendo!
2

Estandarizando tensores: Modos de imagen y conversiones

4m 47s

Comprender los modos de imagen es fundamental antes de introducir datos en una red neuronal. Desglosamos la diferencia entre los canales Grayscale, RGB y RGBA, y cómo utilizar el método convert para estandarizar tus entradas.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Pillow: The Imaging Library, episodio 2 de 5. Dejas un modelo de visión entrenando durante la noche y, al despertar, descubres que el loop crasheó hace horas. El culpable fue una única imagen subida por un usuario con un formato ligeramente diferente al resto. Arreglar esta inconsistencia antes de que llegue a tu modelo es el trabajo de Estandarizar Tensores: Modes y Conversiones de Imagen. Las redes neuronales son rígidas. Si tu capa convolucional espera un tensor de entrada con tres canales de color, y le pasas una imagen con cuatro canales, o con un canal, las matemáticas fallan y el pipeline se detiene. En computer vision, estandarizar los formatos de datos de tus imágenes es un paso de preprocesamiento obligatorio. Para gestionar esto en Pillow, necesitas entender dos propiedades conectadas: bands y modes. Una imagen en Pillow consta de uno o más bands de datos. Puedes pensar en un band como un array bidimensional distinto que contiene un componente específico de la imagen. Por ejemplo, los valores de rojo de toda la imagen forman un band. Pillow permite que existan varios bands en un solo objeto de imagen siempre que compartan las mismas dimensiones y profundidad. Un mode es un string que define el tipo y la profundidad de un píxel en la imagen. El mode le dice a Pillow exactamente qué significan los bands subyacentes. Hay tres modes que te encontrarás constantemente en los pipelines de machine learning. El mode L significa luminancia. Esta es una imagen estándar en escala de grises de ocho bits, y contiene exactamente un band. El mode RGB es tu formato estándar de color verdadero. Está compuesto por tres bands de ocho bits: rojo, verde y azul. Luego está el mode RGBA. La gente suele pensar que una imagen RGBA es solo una foto normal con un fondo transparente. Así no es como la trata el ordenador. Matemáticamente, una imagen RGBA posee un cuarto canal de datos completo: el canal alfa, que dicta la opacidad de cada píxel individual. Aquí viene la parte que importa. Cuando un usuario sube una foto de perfil PNG transparente, esa imagen llega a tu pipeline como RGBA. Trae cuatro bands de datos. Si tu clasificador de imágenes espera un tensor RGB, pasarle ese PNG raw provocará inmediatamente un error de desajuste de dimensiones. Tienes que estandarizarlo. Esto lo consigues usando el método convert. Cuando llamas al método convert en un objeto de imagen, le pasas el string del mode de destino como argumento. Para arreglar nuestro problema con el PNG, abres la imagen y luego llamas a convert pasándole el string RGB. Llamar al método convert no altera tu imagen original in place. Devuelve un objeto de imagen recién construido que contiene los datos de los píxeles traducidos. El proceso de conversión no siempre es un simple borrado de datos extra. Cuando conviertes una imagen RGBA a RGB, Pillow descarta el canal alfa, pero no conserva mágicamente el aspecto que tú creías que tenía el fondo transparente. Por defecto, Pillow reemplaza la transparencia con negro. Si conviertes una imagen RGB a mode L para un modelo en escala de grises, Pillow no se limita a promediar de forma perezosa los tres bands de color. Aplica una fórmula matemática ponderada específica a los canales rojo, verde y azul para calcular una luminancia percibida por el ojo humano de alta precisión. La imagen resultante en mode L tiene exactamente un band. Si llamas a convert y pides el mode en el que ya está la imagen, Pillow simplemente devuelve una copia de la original sin desperdiciar ciclos de computación. Esto significa que puedes ejecutar a ciegas un comando convert to RGB en cada archivo de tu dataset sin preocuparte por penalizar a los que ya están formateados correctamente. Asume siempre que las imágenes proporcionadas por los usuarios tienen profundidades de canal impredecibles. Forzar una conversión de mode estricta en la frontera de tu pipeline es la póliza de seguro más barata que tienes contra errores de dimensión en runtime. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue construyendo!
3

Geometría para modelos: Redimensionado, recorte y relleno

4m 25s

Abordamos el problema de remodelar imágenes para entradas de modelos de tamaño estricto. Aprenderás la diferencia entre aplastar una imagen con resize, recortarla con fit y añadir márgenes con pad.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Pillow: la librería de imágenes, episodio 3 de 5. Le pasas una foto de smartphone a tu red neuronal y su precisión cae. El problema no son tus weights ni tu arquitectura. Si simplemente aplastas una foto rectangular en un tensor cuadrado, distorsionas las features antes incluso de que el modelo las vea. Este episodio trata sobre geometría para modelos: resizing, cropping y padding. Estás preparando fotos de smartphone para un modelo ResNet que espera un input exacto de 224 por 224 píxeles. Las fotos del mundo real tienen todo tipo de formas. Tienes paisajes anchos y retratos altos, pero tu modelo exige un cuadrado perfecto. Tienes que salvar esa diferencia sin arruinar los datos originales. El error más común es llamar al método resize estándar en la imagen y pasarle las dimensiones de 224 por 224. Resize es una herramienta tosca. Fuerza la imagen a esas dimensiones exactas e ignora por completo el aspect ratio original. Si la imagen original era un rectángulo ancho, se aplasta horizontalmente. Los círculos se convierten en óvalos estrechos. La red neuronal aprende de estas formas distorsionadas, lo que degrada su rendimiento en el mundo real. Resize no hace un fit inteligente de la imagen; simplemente la deforma a ciegas. Para evitar la distorsión, podrías hacer un crop manual de la imagen. El método crop estándar recibe una tuple de cuatro coordenadas que define los límites izquierdo, superior, derecho e inferior. Podrías calcular el cuadrado central de tu imagen y hacer un crop del resto. Esto conserva el aspect ratio y evita aplastar las features. Sin embargo, descarta datos de los bordes, y escribir las matemáticas para calcular la caja central exacta para cada tamaño de imagen que recibes es tedioso. Aquí está la clave. Pillow tiene un módulo ImageOps diseñado específicamente para resolver este mismo problema de geometría. Si quieres hacer un crop sin hacer cálculos, usas el método fit de ImageOps. Le dices el tamaño exacto que quieres, como 224 por 224. Calcula el aspect ratio del tamaño que has pedido, escala la imagen hacia abajo para que el lado más corto coincida con tu target, y luego hace un crop automático del exceso desde el centro. Obtienes un cuadrado perfecto y cero distorsión, con el sujeto normalmente justo en el centro. ¿Qué pasa si no te puedes permitir perder los bordes de la imagen? Si el sujeto está descentrado, un center crop podría cortarlo por la mitad. En ese caso, cambias al método pad de ImageOps. Pad escala la imagen hacia abajo para que el lado más largo encaje en tu target de 224 píxeles. El lado más corto ahora será menor de 224. Para compensar la diferencia, el método pad añade bordes de color sólido para rellenar el cuadrado. Esto se conoce comúnmente como letterboxing. Toda la imagen original se conserva, el aspect ratio permanece totalmente intacto, y el modelo sigue recibiendo su cuadrado exacto. Cada vez que cambias el tamaño de una imagen con cualquiera de estos métodos, Pillow tiene que calcular los nuevos píxeles. Para modelos de machine learning donde el detalle a nivel de píxel importa, quieres un filtro de resampling de alta calidad. Al llamar a fit, pad o resize, puedes pasar un argumento de resampling. Un filtro como BICUBIC es una gran opción estándar aquí. Mira los píxeles de alrededor para calcular transiciones suaves, preservando la nitidez de los bordes de los que dependen tus capas convolucionales. Una red neuronal puede aprender fácilmente a ignorar el padding negro, pero no puede desaplastar una feature distorsionada. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue creando!
4

El puente de arrays: Moviendo píxeles a PyTorch

4m 41s

Pillow actúa como puente entre los archivos de imagen en bruto y los arrays matemáticos. Cubrimos cómo traducir imágenes a tensores de NumPy y formatos de PyArrow, y cómo convertir las salidas del modelo de nuevo en imágenes visibles.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Pillow: The Imaging Library, episodio 4 de 5. Los frameworks de machine learning como PyTorch o TensorFlow no saben realmente qué es un JPEG o un PNG. Solo entienden de matemáticas, lo que significa que solo entienden arrays multidimensionales. Si pasas un archivo de imagen directamente a un modelo, fallará. Necesitas una forma de traducir esos bytes codificados a un formato puramente matemático. The Array Bridge: Moving Pixels to PyTorch es exactamente como solucionas esto. Pillow actúa como el traductor universal en el stack de IA. Cuando abres una imagen con Pillow, obtienes un objeto Image. Para meter eso en un pipeline de datos, pasas ese objeto Pillow directamente a Numpy usando la función as array. Internamente, Pillow expone una interfaz de buffer estándar. Numpy lee este buffer de memoria y lo envuelve en un array multidimensional. Para una fotografía en color estándar, obtienes un array tridimensional que representa la altura, la anchura y los canales de color. Aquí es donde la cosa se pone interesante. Al hacer esta conversión, abandonas por completo el ecosistema de Pillow. El array resultante no contiene ninguno de los metadatos de Pillow. La configuración de DPI, los datos EXIF, los perfiles de color ICC y las paletas de colores se eliminan por completo. Te quedas con valores numéricos de píxeles puros y en crudo. Si tu imagen original estaba basada en paleta, como un archivo GIF, tienes que convertirla a una imagen RGB dentro de Pillow antes de pasarla a Numpy. De lo contrario, solo obtendrás un array de números de índice de paleta sin sentido en lugar de colores reales. Una vez que tus píxeles están en forma de array, tu framework puede ejecutar sus operaciones de tensor, aplicar filtros o ejecutar un modelo de computer vision. Pero al final, obtienes un resultado de vuelta. Un modelo podría devolver un nuevo array que represente una imagen generada o una máscara de segmentación. Para ver o guardar este resultado, tienes que cruzar el puente en la dirección opuesta. Coges ese array de salida y se lo pasas a la función de Pillow llamada from array. Pillow lee el shape y el tipo de datos del array de Numpy para averiguar cómo interpretar los números. Si ve un array de enteros sin signo de ocho bits con tres canales, crea por defecto una imagen RGB. Si ve un solo canal, crea una imagen en escala de grises. También tienes la opción de pasar explícitamente el modo de color tú mismo si necesitas sobrescribir el comportamiento por defecto. Una vez que Pillow reconstruye el objeto Image, simplemente llamas al método save para escribirlo directamente en tu disco duro. Mover memoria entre diferentes libraries puede ser costoso. Si estás procesando un dataset masivo de imágenes de alta resolución, copiar datos de píxeles de un lado a otro crea un cuello de botella importante. Para solucionar esto, Pillow soporta el formato Apache Arrow a través de una función llamada from arrow. Arrow es un estándar para datos en memoria. Cuando usas la función from arrow, Pillow construye una imagen directamente a partir de la estructura de datos de Arrow usando memoria compartida zero-copy. Esto significa que Pillow y tus otras herramientas apuntan exactamente a la misma ubicación de memoria física. Los datos nunca se duplican. Es una forma muy eficiente de introducir grandes volúmenes de píxeles en pipelines modernos sin agotar la memoria de tu sistema. El verdadero poder de una library de imágenes en un stack de IA no está solo en abrir el archivo, sino en apartarse elegantemente para que las matemáticas puedan hacer lo suyo. Gracias por dedicarme unos minutos. Hasta la próxima, cuídate.
5

Aumento de datos ligero: El módulo ImageOps

3m 57s

No siempre necesitas bibliotecas pesadas para aumentar tu conjunto de datos. Exploramos el módulo ImageOps de Pillow para reflejar, voltear y ajustar el contraste fácilmente con el fin de expandir artificialmente tus datos de entrenamiento.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Pillow: The Imaging Library, episodio 5 de 5. Importas un framework de computer vision enorme, arrastrando gigabytes de dependencias, solo para hacer un flip a unas pocas imágenes de entrenamiento. No siempre necesitas una library especializada y pesada para montar un pipeline de augmentation robusto. A veces, todo lo que necesitas es Lightweight Augmentation: el módulo ImageOps. Antes de ver las funciones, tenemos que separar ImageOps del módulo ImageFilter. Los oyentes a veces los confunden. ImageFilter aplica convolution kernels a una imagen, calculando nuevos valores de píxeles basándose en sus vecinos para crear blurs o detectar bordes. ImageOps es totalmente distinto. Ofrece operaciones de pixel-mapping listas para usar. Son transformaciones directas y rápidas que manipulan el color o la posición de píxeles individuales sin depender de matemáticas complejas con los vecinos. Si estás preparando un dataset para machine learning, ImageOps te da herramientas instantáneas para multiplicar tus datos. Tienes augmentations espaciales deterministas. La función mirror hace un flip horizontal de tu imagen, intercambiando los lados izquierdo y derecho. La función flip hace un flip vertical, intercambiando la parte superior y la inferior. Ambas operaciones conservan las dimensiones exactas de tus datos originales, solo que reorientados. También tienes acceso inmediato a ajustes de color y contraste. La función grayscale convierte tu imagen a un formato en blanco y negro de ocho bits. Esto se usa comúnmente para reducir la dimensionalidad de tus datos de entrada cuando el color no es relevante para la tarea de clasificación. La función invert invierte todos los canales de color. Un píxel de ocho bits con un valor de cero pasa a ser doscientos cincuenta y cinco, convirtiendo un fondo blanco en negro y los píxeles rojos en cian. Esto es altamente efectivo al generar máscaras negativas para tareas de segmentación. Aquí está la clave. La función autocontrast es especialmente útil para estandarizar datasets raw con iluminación inconsistente. Calcula un histograma de la imagen, encuentra los píxeles más oscuros y más claros, y estira el rango de color para que el píxel más oscuro sea negro puro y el más claro sea blanco puro. Puedes pasarle un porcentaje de cutoff a la función autocontrast. Esto le dice a Pillow que ignore los píxeles outlier extremos, como un único destello de sol muy brillante, al calcular la nueva curva de contraste. Imagina que creas un generador de datos sencillo para imágenes de satélite. Las fotos de satélite se ven bien desde cualquier orientación, así que puedes duplicar tranquilamente tu training set con desplazamientos espaciales. Escribes una función que recibe un directorio de imágenes. Para cada archivo, cargas la imagen. Generas un número entero aleatorio. Si el número es par, le pasas la imagen a la función mirror de ImageOps. Si es impar, se la pasas a la función flip. Luego guardas la imagen resultante con un nuevo nombre de archivo añadiéndole el tipo de transformación. Acabas de multiplicar tu dataset usando una standard library, manteniendo tu entorno de deployment excepcionalmente ligero. En lugar de recurrir a paquetes pesados de machine learning para la preparación básica de datos, consultar la documentación oficial en busca de soluciones nativas evita el bloat de dependencias. Experimentar de forma práctica con estas herramientas integradas simplificará drásticamente tus scripts de preprocessing. Si quieres sugerir temas para una nueva serie, visita devstories dot eu. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue construyendo!