根据这个article的答案,它指的是将单个图像组合成4面。从那里,我想从只使用一个视频到使用4个视频作为输入。在
这是我用单个视频作为输入的代码import cv2
import numpy as np
def make4side(image, scale=0.5):
# image = cv2.imread(image)
h = int((scale*image.shape[0])) #height
w = int((scale*image.shape[1])) #width
image = cv2.resize(image, (w,h ), interpolation = cv2.INTER_AREA) #shrink image to half
output = np.zeros((w+h+h , w + h + h, 3), dtype="uint8")
# top
output[0:h, h:h+w] = image
# left >> rotate 90
output[h:h+w, 0:h] = np.rot90(image,1)
# right >> rotate 270
output[h:h + w, h + w:h +w +h] = np.rot90(image,3)
# bottom >> rotate 180
output[h+w:h+w+h, h:h+w] = np.rot90(image,2)
return output
#cv2.imwrite('test.jpg', output)
def process(video):
cap = cv2.VideoCapture(video)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
holo = None
ret = False
while(not ret):
ret, frame = cap.read()
if ret:
frame = cv2.resize(frame, (640, 480), interpolation = cv2.INTER_AREA)
holo = make4side(frame)
out = cv2.VideoWriter('hologram640x480.avi',fourcc, 23.98, (holo.shape[0],holo.shape[1]))
total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
count = 0
print("Processing %d frames"%(total_frames))
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
if ret:
frame = cv2.resize(frame, (640, 480), interpolation = cv2.INTER_AREA)
holo = make4side(frame)
out.write(holo)
count += 1
print("Total:%d of %d"%(count,total_frames))
if(count>=total_frames-1):
break
cap.release()
out.release()
return
process('g.mov')
结果是这样的。在
在这段代码中,整个帧的高度和宽度都是基于输入的,这也是我所关注的单个视频,因为我使用了4个视频,当然帧分辨率不一样(但都是横向的)。函数make4side()中的变量h和w是帮助定位每个小框架的主要部分。那么对于这种情况,大帧(可变输出)的分辨率应该是多少?在
我必须读4个视频并将其写入一个,那么,我如何使用VideoCapture对象来实现这一目的呢
为了让我的问题更清楚,我想有一个单独的视频,由4个输入视频组成,每个视频将被放置在每个位置(顶部、底部、左侧和右侧)。我有一个大帧分辨率的问题,我不知道使用什么,如果我有4个视频,而不是一个。另一个问题是关于VideoCapture对象。我怎样才能同时读取所有视频的帧,或者以其他方式读取?在
谢谢你
编辑:
顶部
左侧
背面
右侧
这些不是我将要使用的真正的帧,但只是一个简单的想法,我将使用我的视频。另外,输入文件的分辨率可能不同。如何使用多个videocapture对象来读取每个对象并将其放置在大帧的每一侧以编写单个视频