2012-05-18 10 views
13

Entonces, para este proyecto en el que estoy trabajando, tengo 2 fotos. Estas dos fotos deben coserse juntas, una en la parte superior y otra en la inferior, y luego podrás ver la imagen completa. ¿Alguna idea sobre qué módulo debería usar para hacer esto?Cosiendo fotos juntas

+1

¿Se superponen como un panorama? ¿O solo necesita hacer una imagen más grande poniendo dos más pequeños uno al lado del otro? – Leopd

Respuesta

19

El python imaging library se comerá esa tarea en el desayuno.

Consulte el tutorial en particular la sección "Corte, pegado y fusión de imágenes" para obtener ayuda.

Para esbozo, cargar ambas imágenes con Image.open, averiguar cuán grande es la imagen de salida será mediante el atributo size y algunos además, crear la imagen de salida con Image.new y luego usar el método paste a más allá de las dos imágenes originales en.

+1

¿Podría elaborar un poco sobre eso? ¿Como qué funciones usaría? ¿Algun consejo? –

+5

Agregué algunos consejos a la respuesta. Normalmente escribiría un programa de demostración, pero ha sido una semana larga y una buena bebida alcohólica llama ;-) –

+0

¡Genial! Eso fue perfecto. Gracias por su ayuda –

2

Este es un código de la visión de computadora de Jan Erik Solems con el libro de pitón; es probable que pueda editarlo para adaptarse a su superior/inferior necesita

def stitchImages(im1,im2): 
    '''Takes 2 PIL Images and returns a new image that 
    appends the two images side-by-side. ''' 

    # select the image with the fewest rows and fill in enough empty rows 
    rows1 = im1.shape[0]  
    rows2 = im2.shape[0] 

    if rows1 < rows2: 
     im1 = concatenate((im1,zeros((rows2-rows1,im1.shape[1]))), axis=0) 
    elif rows1 > rows2: 
     im2 = concatenate((im2,zeros((rows1-rows2,im2.shape[1]))), axis=0) 
    # if none of these cases they are equal, no filling needed. 

    return concatenate((im1,im2), axis=1) 
15

Aquí está un ejemplo de código usando Pillow. Espero que ayude a alguien!

from PIL import Image 

def merge_images(file1, file2): 
    """Merge two images into one, displayed side by side 
    :param file1: path to first image file 
    :param file2: path to second image file 
    :return: the merged Image object 
    """ 
    image1 = Image.open(file1) 
    image2 = Image.open(file2) 

    (width1, height1) = image1.size 
    (width2, height2) = image2.size 

    result_width = width1 + width2 
    result_height = max(height1, height2) 

    result = Image.new('RGB', (result_width, result_height)) 
    result.paste(im=image1, box=(0, 0)) 
    result.paste(im=image2, box=(width1, 0)) 
    return result 
+3

este código funciona, acabo de probarlo ahora. Puede guardar el archivo usando este código -> merged = merge_images (file1, file2) merged.save (file_dest) – fedmich

+0

La pregunta era para una imagen encima de otra, que simplemente está volteando las acciones en result_width con result_height – Ywapom