opencv实现两个视频拼接显示
Mat实现将两列视频帧文件显示在同一个视频中
注释是之前使用IplImage指针实现的,但是由于运行了几次后出现了内存访问冲突的问题,所以就改用了Mat类,感兴趣的可以试着用IplImage实现下,两种版本都是可以运行的。
//将两个视频并列在一个视频中播放
#include <opencv2\opencv.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;int main()
{Mat depth = imread("F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/warp-depth-f000.png");Mat image = imread("F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/warp-img-f000.png");int liv_width = depth.cols + image.cols;int liv_height = image.rows;int liv_nChannels = image.channels();VideoWriter videoWriter("F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/warp-result.avi",CV_FOURCC('M','J','P','G'),20,Size(liv_width,liv_height));//IplImage *lpv_firstFrame1 = cvLoadImage("F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/final-depth-f000.png");//IplImage *lpv_firstFrame2 = cvLoadImage("F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/final-img-f000.png");//int liv_width = lpv_firstFrame1->width+lpv_firstFrame2->width;//int liv_height = lpv_firstFrame2->height;//int liv_nChannels = lpv_firstFrame2->nChannels;// 初始化CvVideoWriter//CvVideoWriter* videoWriter = cvCreateVideoWriter("final-result.avi",CV_FOURCC('X', 'V', 'I', 'D'), 20, cvSize(liv_width, liv_height),1);/*IplImage *lpv_imageFrame1;IplImage *lpv_imageFrame2;*//*Mat image1;Mat image2;*///用于表示处于视频的多少帧int i = 0; char imageDir1[256], imageDir2[256]; //略大于读入文件目录的总字符数,防止因为'\0'而出现栈溢出的情况/*sprintf(imageDir1, "F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/final-depth-f%03d.png", i);sprintf(imageDir2, "F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/final-image-f%03d.png", i);*//*image1 = imread(imageDir1);image2 = imread(imageDir2);*///while ((lpv_imageFrame1 = cvLoadImage(imageDir1))&&(lpv_imageFrame2=cvLoadImage(imageDir2)))//while (image1.empty()&&image2.empty())while (!(depth.empty() && image.empty())){Rect rectd = Rect(0, 0, depth.cols, depth.rows);Rect recti = Rect(depth.cols, 0, image.cols, image.rows);Mat dstImage;dstImage.create(Size(liv_width,liv_height),image.type());/*image1.copyTo(Mat(dstImage, rectd));image2.copyTo(Mat(dstImage, recti));*/depth.copyTo(Mat(dstImage, rectd));image.copyTo(Mat(dstImage, recti));videoWriter << dstImage;i++;sprintf(imageDir1, "F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/warp-depth-f%03d.png", i);sprintf(imageDir2, "F:/3DImageProcess/MSProjection/MSProjection/MSProjection/results/cam7/warp-img-f%03d.png", i);depth = imread(imageDir1);image = imread(imageDir2);//两个ROI区域/*CvRect rect1 = cvRect(0, 0, lpv_imageFrame1->width, lpv_imageFrame1->height);CvRect rect2 = cvRect(lpv_imageFrame1->width, 0, lpv_imageFrame2->width, lpv_imageFrame2->height);*///img1 img2 原图 dst1、dst2放缩后的图 dst_big 大图 *dst1, *dst2, //IplImage *dst_big = cvCreateImage(cvSize(lpv_imageFrame1->width + lpv_imageFrame2->width, lpv_imageFrame2->height), lpv_imageFrame2->depth, 3);设置ROI//cvSetImageROI(dst_big, rect1);//cvCopy(lpv_imageFrame1, dst_big);//cvSetImageROI(dst_big, rect2);//cvCopy(lpv_imageFrame2, dst_big);//cvWriteFrame(videoWriter, dst_big);//为什么没法即时显示图像?/*IplImage *dt = cvCreateImage(cvSize(1000, 375), lpv_imageFrame2->depth, 3);cvResize(dst_big, dt);cvShowImage("imageFrame", dt);*/释放ROI//cvResetImageROI(dst_big);//释放图像空间 //cvReleaseImage(&dst_big);cvReleaseImage(&dt);}必须释放,否则会出现写好的视频丢失总帧数、不能快进的问题//cvReleaseVideoWriter(&videoWriter); // //释放图像空间//cvReleaseImage(&lpv_firstFrame1);//cvReleaseImage(&lpv_firstFrame2);//cvReleaseImage(&lpv_imageFrame1);//cvReleaseImage(&lpv_imageFrame1);return 0;
}
最终的效果图如下:
opencv实现两个视频拼接显示相关推荐
- 两段视频如何无缝拼接?如何将两个视频拼接在一起
两段视频如何无缝拼接?越来越多的人开始习惯于拍摄视频发布在各种平台上.有些人还喜欢拍摄vlog记录自己的生活,拍摄之后整理时,需要将它们合并在一起,如何将两个视频拼接在一起? 软件一:FFmpeg J ...
- Video Input with OpenCV and similarity measurement(使用opencv测量两个视频的相似度)
Video Input with OpenCV and similarity measurement(使用opencv测量两个视频的相似度) 参考示例程序及视频文件下载: 一.先决条件 1.两种检查相 ...
- 如何把两个视频拼接在一起?这些工具太棒了!
如何把两个视频拼接在一起?对于自媒体行业的人来讲,平时在进行短视频的剪辑时,总会需要合并多个视频,之后再剪辑处理.不过对于大部分没有从事自媒体行业的人来讲,可能对合并视频并不了解.下面我就来给大家分享 ...
- php中的如何将拼接到一起,如何将两个视频拼接在一起?视频拼接方法
专注实拍 监控 风景 各类视频 申请入群加微信: neimu500 因为专注 所以专业! 我们只发优质实拍视频,群管理专业.规范,确保群的视频质量以及秩序!无水印可下载可分享. 网上很多网红都通过视频 ...
- jetson nano 在opencv拉流的视频上显示中文汉字(含c++完整源码)
目录 问题 解决方案 步骤一:生成中文图片 步骤二:中文图片蒙皮到视频帧,形成中文显示效果 问题 在jetson nano这样的嵌入式设备上,用opencv拉流,并在实时视频上面,显示汉字. 关于使用 ...
- python opencv如何读取本地视频并显示 cv2.VideoCapture()
import cv2cap = cv2.VideoCapture('Video_2020-01-06_101858.wmv')while cap.isOpened():ret, frame = cap ...
- 两个视频左右拼接成一个视频,且两个视频音频都保留
目录 背景 技术 思路 过程 1.提取图片帧(opencv) 2.合成新图组(opencv) 3.压缩新图组变成新视频(opencv) 4.提取音频.合并音频(ffmpeg) 5.将新音频压缩至新视频 ...
- OpenCV进行视频拼接
最近实验室需要做个Demo,要把两个视频拼到一个窗口里面进行播放.于是写了个使用ROI来实现两个视频拼接到一起的代码,但是该代码的前提是两个视频的帧数.宽高都一样. #include "st ...
- IOS视频编辑,视频裁剪,视频拼接,音频处理,视频处理
前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUImage即可实现多种滤镜.磨皮美颜的功能,并且可以脸部识别实时美颜等功能,这个有很多 ...
最新文章
- 我也来晒Flex编写的工作流编辑器
- 浅谈公司形象网站的设计流程
- [概统]本科二年级 概率论与数理统计 第二讲 几何概型
- Mysql中的递归层次查询(父子查询)
- ANSYS——固定斜度的变截面变截面的定义、自由耦合和变截面的定义
- 图解算法之排序算法(3)——插入排序
- NonComVisibleBaseClass Exception
- 【分类汇总】110 天以来的题解分类汇总
- 漫画:Dijkstra 算法的优化
- excel服务器bom修改,勤哲Excel服务器物料清单BOM表的实现方法
- ENVI大气校正后遥感图像颜色变了及编辑头文件
- Mysql 窗口函数
- Redis 使用 scan 命令代替 keys
- 工业机器人组成结构【拆卸 / 组装 KUKA 工业机器人】
- 用Eclipse建立从Vuze/Azureus工程并编译运行的方法
- MongoDB 文档字段增删改
- 递归算法——阶乘、斐波那契数列
- 基于无人机的移动边缘计算网络(Matlab代码实现)
- 【头歌】重生之我在py入门实训中(3): if条件语句
- 教你如何正确运营小红书账号,纯干货!
热门文章
- 与业务深度融合,泛微协助大型集团搭建一体化的合同管理平台
- oracle常用sql语句
- win10去除管理员账户密码后出现两个账号的解决方法
- 渲染用计算机功耗,用了功率计,才发现原来电脑功耗其实并不大,买大功率电源是否浪费?...
- 手把手带你实现JAVA自定义异常和全局异常处理
- 30、40多岁的人互联网创业优势何在
- 百度网盘在线播放倍数调整
- 惠头条脚本源码分享,基于autojs,自动关闭弹窗广告,播放和切换视频
- 解决迅雷、酷我软件安装乱码问题
- oracle统计大于0的的值次数,[转载]EXCEL中统计每个数据的出现次数