Python 有什么方法可以将多张图片合并为一张图片吗?

Is there any way to merge multiple image into one single image in Python?

我想将多张图片水平合并为一张图片。 我试图通过给定的代码合并图像,但它给出了白色图像? 对于合并图像,我尝试了 PIL 。

Input1

Input2

Input3

output Image

import sys
from PIL import Image


def append_images(images,bg_color=(255,255,255), aligment='center'):

    widths, heights = zip(*(i.size for i in images))


    new_width = sum(widths)
    new_height = max(heights)


    new_im = Image.new('RGB', (new_width, new_height), color=bg_color)

    offset = 0
    for im in images:
        y = 0
        if aligment == 'center':
            y = int((new_height - im.size[1])/2)
        elif aligment == 'bottom':
            y = new_height - im.size[1]
        new_im.paste(im, (offset, y))
        offset += im.size[0]


    return new_im
date=input("Enter Date:")
l=['1.jpg','2.jpg','3.jpg']


images = map(Image.open,l)
combo_2 = append_images(images, aligment='center')
combo_2.save('combo_2.jpg')

我更喜欢使用 OpenCV 和 Numpy 组合。这意味着使用数组。 下面的代码只是以第一张图片为起点——高度。您将附加的任何图像都将根据高度水平堆叠。这意味着,附加图像将按蒙太奇高度调整大小,然后水平堆叠到蒙太奇。

工作代码

import cv2
import numpy as np

image1 = cv2.imread("img1.jpg")[:,:,:3]
image2 = cv2.imread("img2.jpg")[:,:,:3]

class Montage(object):
    def __init__(self,initial_image):
        self.montage = initial_image
        self.x,self.y = self.montage.shape[:2]

    def append(self,image):
        image = image[:,:,:3]
        x,y = image.shape[0:2]
        new_image = cv2.resize(image,(int(y*float(self.x)/x),self.x))
        self.montage = np.hstack((self.montage,new_image))
    def show(self):
        cv2.imshow('montage',self.montage)
        cv2.waitKey()
        cv2.destroyAllWindows()

首先,您使用定义高度的第一张图像初始化 class。因此,如果您想要不同的高度,请传入 class 调整大小的图像。之后你可以水平附加图像

用法

>>> m = Montage(image1)
>>> m.append(image2)
>>> m.show()

您的结果:


但通常它可以处理完全不同的尺寸

图片 1

图 2

蒙太奇

替换你的行:

images = map(Image.open,l)

与:

images = [ Image.open(im) for im in l]

一切正常。