Procesamiento de imagenes en Python

Procesamiento de imagenes en Python

Procesamiento de imagenes en Python

Una buena manera de programar es a partir de ejemplos ya que nos permite investigar o profundizar en algunos conceptos y aplicarlos en dar una solucion a un problema.

Con este psot iniciamos una serie de articulos relaccionados con ejercicios y ejemplos mas o menos avanzados para dominar el lenguaje Python.

En este articulo vamos a dar un enunciado de un problema a solucionar con Python.

Enlace patrocinado

Gana dinero con Respondent.io

La idea es investigar posibles soluciones a un problema dado y encontrar una solucion correcta.

Usaremos temas avanzados de Python que tengan una cierta complejidad.

El enunciado de ejercicio es

Procesamiento de imagenes en Python en paralelo

Descargar varias imagenes en formato JPG o PNG y guardarlas en una carpeta.

Escribir un programa que procese varias imagenes en paralelo.

El procesamiento consiste en convertir cada imagen en escala de grises, redimensionarla a 600×600 pixeles y despues difuminarla.

El programa debe almacenar las imagenes procesadas en otra carpeta.

Puedes usar la libreria PIL DE python o cuaalquier otra que creas conveniente.

Si quieres puedes indicar tu solucion o propuesta en la seccion de comentarios.

Te indicamos una posible solucion al problema

import os
import threading
from PIL import Image, ImageFilter

# La carpeta que contiene las imรกgenes antes del tratamiento
ruta_carpeta_img = 'imagenes_antes_tratamiento/'

# La carpeta que contiene las imรกgenes despuรฉs del tratamiento
ruta_carpeta_despues_tratamiento = 'imagenes_despues_tratamiento/'

# Si la carpeta de salida no existe en la ruta indicada
if not os.path.exists(ruta_carpeta_despues_tratamiento):
# Creamos la carpeta
os.makedirs(ruta_carpeta_despues_tratamiento)

# Listamos las imรกgenes contenidas en la carpeta que tengan รบnicamente
# las extensiones PNG, JPG o JPEG.
lista_archivos_imagenes = [f for f in os.listdir(ruta_carpeta_img) if
f.endswith(('png', 'jpg', 'jpeg'))]

def tratar_imagen(ruta_img, ruta_salida):
"""Funciรณn que permite tratar una imagen aplicando una serie de operaciones"""
try:
# Lectura de una imagen
with Image.open(ruta_img) as img_tmp:
# Convertimos la imagen a escala de grises
img_tmp = img_tmp.convert('L')
# Redimensionamos la imagen a un tamaรฑo de 600 x 600 px
img_tmp = img_tmp.resize((600, 600))
# Aplicamos un filtro que permite desenfocar la imagen
img_tratada = img_tmp.filter(ImageFilter.BLUR)
# Guardamos la imagen tratada en la carpeta 'ruta_salida'
img_tratada.save(ruta_salida)
print(f"La imagen '{ruta_img}' ha sido tratada y guardada en la carpeta '{ruta_salida}'")
except Exception as e:
print(f"Error al tratar la imagen '{ruta_img}': {e}")

# Inicializamos una lista que almacenarรก todos los threads usados
# para el tratamiento de todas las imรกgenes
lista_threads = []

# Recorremos cada imagen de la carpeta
for img in lista_archivos_imagenes:

# Inicializaciรณn de las rutas de entrada y salida
ruta_entrada_img = os.path.join(ruta_carpeta_img, img)
ruta_salida_img = os.path.join(ruta_carpeta_despues_tratamiento,
f"tratada_{img}")

# Inicializaciรณn de un thread para la imagen actual
thread = threading.Thread(target=tratar_imagen, args=(
ruta_entrada_img, ruta_salida_img))

# Aรฑadimos este thread a la lista de threads
lista_threads.append(thread)

# Iniciamos este thread
thread.start()

# Esperamos que todos los threads finalicen
for t in lista_threads:
t.join()

print("Todas las imรกgenes han sido tratadas.")

Te puede interesar

Aprender Python con ejemplos