2016-10-03 100 views
1

我想拼接来自多台摄像机的视频。拼接时,我想将视图从一台摄像机切换到另一台摄像机。在OpenCv中可以做到吗?多台摄像机的视频拼接

例如,我有3个视频路径(具有相同持续时间的视频),并希望通过在视频之间切换来创建单个视频摘要。首先我创建了3个视频捕获对象,如下所示。

cap0=cv2.VideoCapture(path1) 
cap1=cv2.VideoCapture(path2) 
cap2=cv2.VideoCapture(path3) 

与之相似,我还创建

ret,frame0=cap0.read() 
ret,frame1=cap1.read() 
ret,frame3=cap2.read() 

现在开始,我将有来自帧是由CAP0读取并传递到VideoWriter对象。一段时间后,我想插入从路径1开始读取的帧。就像我从路径1写入帧到3秒一样,我想从4秒到6秒插入路径2的帧

现在,如果我再次切换回路径1,那么我希望通过跳过路径1的帧从4秒到6秒从7秒插入帧。

有什么办法做这等可跳过帧或任何其他可替代

回答

0

是的,你可以先用

int fps = (int) cvGetCaptureProperty(capture1, CV_CAP_PROP_FPS); 

现在计算的数算出您的视频帧率做到​​这一点要捕捉的帧,

numberOfFrames = fps*time 

这个时间对于要捕获一个video.Thus计算开始并且对于每个视频流结束帧的时间。然后在Mat中捕获这些帧作为图像并使用VideoWriter编写

+0

中序将它们转换成图像是有必要计算,直到当我转换的指数或位置,如果我回到后面有没有办法来跟踪跳过的像上述问题中提到的情景的框架 – Tinku

+0

是的,如果您想处理图像,则需要计算位置。是的,你可以跟踪跳过的帧。最简单的方法是将图像存储在矢量中,然后在需要时使用它们。 –

0

由于您在拼接时编写了所以我假设您想制作一种gui并查看在不同时间切换的结果,否则Garvita Tiwari答案似乎是正确的。

一种方法是使用变量(比如说)vid_no的createTrackbar,其值范围从0到num_Cams - 1.现在,您可以简单地使用if else,取决于变量vid_no的值从所需的帧中捕获帧视频。 格式OpenCV中使用的TrackBar

createTrackbar("select_Video", "control", &vid_no, num_Cams - 1);