Saltar al contenido

Cómo dividir una imagen en múltiples piezas en Python

Esta es la respuesta más correcta que encomtrarás dar, pero obsérvala pausadamente y analiza si se puede adaptar a tu proyecto.

Solución:

Editar: creo que esta respuesta perdió la intención de cortar una imagen en rectángulos en columnas y filas. Esta respuesta se corta solo en filas. Parece que otras respuestas están cortadas en columnas y filas.

Más simple que todo esto es usar una rueda que alguien más inventó 🙂 Puede ser más complicado configurarlo, pero luego es muy fácil de usar.

Estas instrucciones son para Windows 7; es posible que deban adaptarse a otros sistemas operativos.

Obtén e instala pip desde aquí.

Descargue el archivo de instalación y extráigalo a su directorio raíz de instalación de Python. Abra una consola y escriba (si no recuerdo mal):

python get-pip.py install

Luego obtenga e instale el módulo image_slicer a través de pip, ingresando el siguiente comando en la consola:

python -m pip install image_slicer

Copie la imagen que desea dividir en el directorio raíz de Python, abra un shell de Python (no la “línea de comando”) e ingrese estos comandos:

import image_slicer
image_slicer.slice('huge_test_image.png', 14)

La belleza de este módulo es que

  1. esta instalado en python
  2. Puede invocar una imagen dividida con dos líneas de código
  3. Acepta cualquier número par como parámetro de corte de imagen (por ejemplo, 14 en este ejemplo)
  4. Toma ese parámetro y divide automáticamente la imagen dada en tantos cortes, y guarda automáticamente los mosaicos numerados resultantes en el mismo directorio, y finalmente
  5. Tiene una función para volver a unir los mosaicos de la imagen (que aún no he probado); Aparentemente, los archivos deben tener el nombre de la convención que verá en los archivos divididos después de probar la función image_slicer.slice.

from PIL import Image

def crop(path, input, height, width, k, page, area):
    im = Image.open(input)
    imgwidth, imgheight = im.size
    for i in range(0,imgheight,height):
        for j in range(0,imgwidth,width):
            box = (j, i, j+width, i+height)
            a = im.crop(box)
            try:
                o = a.crop(area)
                o.save(os.path.join(path,"PNG","%s" % page,"IMG-%s.png" % k))
            except:
                pass
            k +=1

Dividir la imagen en mosaicos de MxN píxeles (suponiendo que im sea numpy.ndarray):

tiles = [im[x:x+M,y:y+N] for x in range(0,im.shape[0],M) for y in range(0,im.shape[1],N)]

En el caso de que quieras dividir la imagen en cuatro partes:

M = im.shape[0]//2
N = im.shape[1]//2

losas[0] sostiene el mosaico superior izquierdo

Sección de Reseñas y Valoraciones

Si crees que te ha sido de ayuda nuestro post, sería de mucha ayuda si lo compartes con otros entusiastas de la programación de este modo nos ayudas a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *