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]
一切正常。
我想将多张图片水平合并为一张图片。 我试图通过给定的代码合并图像,但它给出了白色图像? 对于合并图像,我尝试了 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]
一切正常。