博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV合成视频
阅读量:6154 次
发布时间:2019-06-21

本文共 3367 字,大约阅读时间需要 11 分钟。

OpenCV合成视频

主要用到VideoCapture, VideoWriter

/* * Demo制作,将原始视频与该视频跟踪轨迹合并为一个视频。 * 用法:s键将将改合成帧加入到输出视频中 */#include 
#include
#include
#include
#include
using namespace std;using namespace cv;int main(){ const string originalFramePath = "/home/corfox/Data/GOPR/7"; // 原始视频帧路径 string originalFrameName; // 原始视频帧图像名 ostringstream numToStr; Mat originalFrame; // 原始视频帧图像 const int originalFrameNums = 1456; // 原始视频帧数目 int originalFrameWidth = 960; int originalFrameHeight = 540; const string mapVideo = "/home/corfox/Videos/7_25.mp4"; // 轨迹与地图视频 VideoCapture videoCapture; Mat mapFrame; videoCapture.open(mapVideo); if (!videoCapture.isOpened()) return 1; int mapFrameWidth = videoCapture.get(CV_CAP_PROP_FRAME_WIDTH); int mapFrameHeight = videoCapture.get(CV_CAP_PROP_FRAME_HEIGHT); const string mergeVideo = "/home/corfox/Videos/gopr7_25.avi"; // 合并后的视频 VideoWriter videoWriter; videoWriter.open(mergeVideo, CV_FOURCC('M', 'J', 'P', 'G'), 25, Size(mapFrameWidth + originalFrameWidth, mapFrameHeight + originalFrameHeight)); Mat mergeFrame; Rect roiLeft(0, 0, mapFrameWidth, mapFrameHeight); Rect roiRight(mapFrameWidth - 100, mapFrameHeight - 100, originalFrameWidth, originalFrameHeight); if (!videoWriter.isOpened()) return 1; int key = -1; int numCount = 1; while (1) { if (numCount < 10) { numToStr << originalFramePath << "/" << "frame0000" << numCount << ".jpg"; originalFrameName = numToStr.str(); } else if (numCount < 100) { numToStr << originalFramePath << "/" << "frame000" << numCount << ".jpg"; originalFrameName = numToStr.str(); } else if (numCount < 1000) { numToStr << originalFramePath << "/" << "frame00" << numCount << ".jpg"; originalFrameName = numToStr.str(); } else if (numCount < 10000) { numToStr << originalFramePath << "/" << "frame0" << numCount << ".jpg"; originalFrameName = numToStr.str(); } originalFrame = imread(originalFrameName, CV_LOAD_IMAGE_COLOR); originalFrameName.clear(); numToStr.str(""); numCount++; if (numCount > originalFrameNums) { break; } if (!videoCapture.read(mapFrame)) { break; } if (key == 115 || key == 83) // 's' or 'S' { mergeFrame = Mat(originalFrame.rows + mapFrame.rows, originalFrame.cols + mapFrame.cols, CV_8UC3, Scalar(255, 255, 255)); mapFrame.copyTo(mergeFrame(roiLeft)); originalFrame.copyTo(mergeFrame(roiRight)); videoWriter.write(mergeFrame); imshow("merge", mergeFrame); mergeFrame.release(); } imshow("map", mapFrame); imshow("original", originalFrame); key = waitKey(0); if (key == 27) break; } videoCapture.release(); videoWriter.release(); mapFrame.release(); originalFrame.release(); return 0;}

转载于:https://www.cnblogs.com/corfox/p/5414988.html

你可能感兴趣的文章
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>