Вы можете попытаться объединить все изображения, скопировав их в одну черную рамку. Вот пример с одинаковым изображением во всех 4 местах:
import cv2
import numpy as np
#loads images and gets data
img = cv2.imread("img.png")
h,w,_ = img.shape
# creates the resulting image with double the size and 3 channels
output = np.zeros((h * 2, w * 2, 3), dtype="uint8")
# copies the image to the top left
output[0:h, 0:w] = img
# copies the image to the top right
output[0:h, w:w * 2] = img
# copies the image to the bottom left
output[h:h * 2, w:w * 2] = img
# copies the image to the bottom right
output[h:h * 2, 0:w] = img
Вы всегда можете изменить img на что-то другое. Также вы можете объединить их так:
top = np.hstack((img, img))
bottom = np.hstack((img, img))
result = np.vstack((top, bottom))
И результат будет таким же.
Вот пример полученного img с этим кодом:
Однако ваше изображение немного отличается, вам понадобится вращение, и это не просто конкатенация, а копирование. Вот пример этого:
# creates the resulting image with double the size and 3 channels
output = np.zeros((w+h+h , w + h + h, 3), dtype="uint8")
# top img
output[0:h, h:h+w] = img
# left img (rotated 90°)
output[h:h+w, 0:h] = np.rot90(img,1)
# right img (rotated 270°)
output[h:h + w, h + w:h +w +h] = np.rot90(img,3)
# bottom img (rotated 180°)
output[h+w:h+w+h, h:h+w] = np.rot90(img,2)
и результат будет таким:
Если вы используете свое изображение с черным фоном, вы получите более или менее то, что у вас там есть. Возможно, вам придется поиграть с параметрами копирования, но в основном вы делаете что-то вроде:
imgToCopyTo[y1:y2, x1:x2] = imgToCopyFrom
Где y1 и x1 - ваши верхние левые координаты, с которых вы хотите начать копирование, а y2 и x2 - ваши нижние правые координаты того, куда вы хотите скопировать. Также y2-y1 должен иметь высоту imgToCopyFrom x2-x1 ширины (она может быть больше, чем ширина или высота, но не меньше).