我想拼接来自多个相机的视频。拼接时,我想将视图从一个摄像头切换到另一个摄像头。是否可以在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读取的帧。就像我从路径1写入帧到3秒,我想从4秒到6秒插入路径2的帧
现在,如果我再次切换回path1,那么我想通过将path1的帧从4秒跳到6秒来插入7秒内的帧。
有没有办法这样做可能会跳过框架或任何其他替代
答案 0 :(得分:0)
是的,您可以通过首先使用
查找视频的fps来实现此目的int fps = (int) cvGetCaptureProperty(capture1, CV_CAP_PROP_FPS);
现在计算要捕获的帧数,
numberOfFrames = fps*time
此时间是您想要捕获一个视频的时间。因此,计算每个视频流的开始和结束帧。然后将这些帧捕获为Mat中的图像并使用VideoWriter进行写入
答案 1 :(得分: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);