Я предпочитаю работать с OpenCV & Numpy Combo. Это значит работать с массивами.
Код ниже просто взять первое изображение в качестве отправной точки - Высота. Любое изображение, к которому вы добавите изображение, будет горизонтально расположено в зависимости от высоты. Это означает, что размер добавляемого изображения будет изменяться по высоте монтажа, а затем укладываться горизонтально для монтажа.
Рабочий код
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()
Во-первых, вы инициализируете класс первым изображением, которое определит ВЫСОТУ. Так что если вы хотите разной высоты, перейдите в класс с измененным размером изображения. После этого вы можете добавить изображение по горизонтали
Использование
>>> m = Montage(image1)
>>> m.append(image2)
>>> m.show()
Результат в вашем случае:
Но обычно он может работать с разными размерами
Изображение 1
Изображение 2
Montage