es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python PIL: Recortar varias imágenes provoca bloqueo y fuga de memoria

Estoy intentando recortar múltiples imágenes (miles) con PIL y guardar el resultado en el disco. Sin embargo, después de recortar solo algunas cientos de imágenes y guardarlas con éxito, el programa utiliza 17.5 GB de RAM y tarda una eternidad en crear el siguiente recorte. Después de eso, solo se generan dos imágenes más con un tamaño de 65535×65535 píxeles cada una (las imágenes originales son todas de 1920×1080) y luego se termina el bucle.

Mi código:

import PIL
from PIL import Image
PIL.Image.MAX_IMAGE_PIXELS = 4294836225

for path in paths:
   with Image.open(path) as img:
      left, top, right, bottom = calcular_recorte(...)
      cropped = img.crop((left, top, right, bottom))
      cropped.save(nuevo_path, 'png')
      cropped.close()

Nunca se produce ninguna excepción (también intenté usar try/except). ¿Estoy haciendo algo mal aquí o podría ser un error en la biblioteca?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el código no esté optimizado para manejar una gran cantidad de imágenes, lo que resulta en un uso excesivo de memoria. Una posible solución podría ser utilizar una función generadora para cargar y recortar una imagen a la vez en lugar de cargar todas las imágenes en memoria de una vez. Además, puede ser útil limpiar periódicamente la memoria utilizando el módulo recolector de basura. Otro problema potencial podría estar relacionado con el tamaño de la imagen: el uso del atributo MAX_IMAGE_PIXELS para aumentar el tamaño de imagen permitido puede no ser compatible con todos los sistemas y puede provocar un comportamiento inesperado. Puede ser útil verificar las limitaciones del sistema utilizado y ajustar los tamaños de imagen en consecuencia.

Comments are closed.