Как я могу объединить несколько видео в одно видео и установить их положение с помощью Python - PullRequest
0 голосов
/ 28 августа 2018

Моя проблема в том, что у меня есть 4 видео, и я хотел бы объединить и уместить их в одно видео и воспроизводить их сразу, используя Python. Каждое из видео установлено в позиции (например, сверху, снизу, слева, справа), как видео голограммы , например . Есть ли способы, которые могут помочь мне реализовать это? Я нашел связанный источник, похожий на мою проблему, но мне не удалось применить его для моей проблемы.

Заранее спасибо

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете попытаться объединить все изображения, скопировав их в одну черную рамку. Вот пример с одинаковым изображением во всех 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 с этим кодом: enter image description here

Однако ваше изображение немного отличается, вам понадобится вращение, и это не просто конкатенация, а копирование. Вот пример этого:

# 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) 

и результат будет таким:

enter image description here

Если вы используете свое изображение с черным фоном, вы получите более или менее то, что у вас там есть. Возможно, вам придется поиграть с параметрами копирования, но в основном вы делаете что-то вроде:

imgToCopyTo[y1:y2, x1:x2] = imgToCopyFrom

Где y1 и x1 - ваши верхние левые координаты, с которых вы хотите начать копирование, а y2 и x2 - ваши нижние правые координаты того, куда вы хотите скопировать. Также y2-y1 должен иметь высоту imgToCopyFrom x2-x1 ширины (она может быть больше, чем ширина или высота, но не меньше).

...