Подтвердить что ты не робот

Сшивание фотографий вместе

Итак, для этого проекта я работаю, у меня есть 2 фотографии. Эти две фотографии нужно сшить вместе, один сверху и один снизу, а затем вы сможете увидеть всю картину. Любые идеи о том, какой модуль я должен использовать для этого?

4b9b3361

Ответ 1

библиотека изображений python будет есть эту задачу на завтрак.

См. tutorial, в частности раздел "Вырезание, склеивание и слияние изображений" для некоторой соответствующей помощи.

Для грубой схемы загрузите оба изображения с помощью Image.open, узнайте, насколько большим будет выходное изображение с помощью атрибута size и некоторого добавления, создайте выходное изображение с помощью Image.new, а затем используйте paste метод для прохождения двух исходных изображений.

Ответ 2

Здесь пример кода, использующий Pillow. Надеюсь, это поможет кому-то!

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

Это некоторый код из компьютерного видения Яна Эрика Солема с книгой python; вы можете, возможно, отредактировать его, чтобы соответствовать вашим требованиям top/bottom

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)

Ответ 4

Используйте numpy.hstack() или numpy.vstack() зависимости от того, хотите ли вы, чтобы изображения располагались рядом или поверх друг друга. Вы можете преобразовать ваши изображения в массивы numpy, если они представляют собой какой-то странный формат, который numpy не принимает. Убедитесь, что вы установили dtype=np.uint8 если интерпретируете изображения как массивы с помощью np.asarray().

Ответ 5

Я сделал вертикальную строчку вот так - это тот же код из @d3ming

07: def merge_images(file1, file2):
08:     """Merge two images into one vertical image
09:     :param file1: path to first image file
10:     :param file2: path to second image file
11:     :return: the merged Image object
12:     """
13:     image1 = Image.open(file1)
14:     image2 = Image.open(file2)
15: 
16:     (width1, height1) = image1.size
17:     (width2, height2) = image2.size
18: 
19:     # result_width = width1 + width2
20:     result_width = width1
21:     # result_height = max(height1, height2)
22:     result_height = height1 + height2
23: 
24:     print (height2)
25: 
26:     result = Image.new('RGB', (result_width, result_height))
27:     result.paste(im=image1, box=(0, 0))
28:     result.paste(im=image2, box=(0, height1))
29:     return result

строка 19-22 - будет меняться только высота строчки

вставьте второе изображение в line-28 box=(width1, 0) изменится на box=(0, height1)