C++ OpenCV【视频合并:多个图像拼接在一张图像】

news2024/9/24 3:18:20

提示:本文中视频拼接指的是将多张图像按空间合并在一张图像上,而不是将多张图像按时间顺序拼接成一个多帧片段。

文章目录

前言

一、OpenCV知识点

1.OpenCV裁剪矩形区域赋值 

2.OpenCV将Mat粘贴到指定位置 

二、程序样例

1.程序源码

2.运行结果


前言

C++版拼接视频不如Python版简洁。

Python版:Python OpenCV【视频合并:多个图像拼接在一张图像】_IT.Husky的博客-CSDN博客

为了实现C++版拼接视频,首先复习一下OpenCV相关知识。


一、OpenCV知识点

1.OpenCV裁剪矩形区域赋值 

Mat img;//读取图像
 
cv::Rect rect(x, y, WIDTH, HEIGHT);//定义坐标(x,y)为矩形的左上角起点,宽高为WIDTH和HEIGHT的矩形
 
Mat tmp = img(rect);//将img上矩形框住的部分赋给tmp

2.OpenCV将Mat粘贴到指定位置 

cv::Mat src;//读取图像

cv::Mat image;//定义一个存放图像的Mat

cv::Rect rect(0, 0, src.cols, src.rows);//定义坐标(0,0)为矩形的左上角起点,宽高为src.cols, src.rows的矩形

src.copyTo(image(rect));//把src的内容复制到image指定的Rect框中

二、程序样例

1.程序源码

代码如下(带注释):

#include <iostream>
#include <opencv.hpp>
using namespace std;

int main()
{
    //读视频
	cv::VideoCapture videoLeftUp("kll.mp4");
	cv::VideoCapture videoRightUp("kll.mp4");
	cv::VideoCapture videoLeftDown("kll.mp4");
	cv::VideoCapture videoRightDown("kll.mp4");
	int fps = videoLeftUp.get(5);
	cv::Size size = cv::Size(videoLeftUp.get(3), videoLeftUp.get(4));
	//写视频
    cv::VideoWriter writer("kllHeBing.mp4", CV_FOURCC('m', 'p', '4', 'v'), fps, size, true);
	cv::Mat frameLeftUp, frameRightUp, frameLeftDown, frameRightDown;
	//读视频帧
    while (videoLeftUp.read(frameLeftUp) && videoRightUp.read(frameRightUp) &&
		videoLeftDown.read(frameLeftDown) && videoRightDown.read(frameRightDown))
	{
        //调整帧尺寸
		cv::Mat frameLeftUpNew, frameRightUpNew, frameLeftDownNew, frameRightDownNew;
		resize(frameLeftUp, frameLeftUpNew, cv::Size(frameLeftUp.cols / 2, frameLeftUp.rows / 2));
		resize(frameRightUp, frameRightUpNew, cv::Size(frameRightUp.cols / 2, frameRightUp.rows / 2));
		resize(frameLeftDown, frameLeftDownNew, cv::Size(frameLeftDown.cols / 2, frameLeftDown.rows / 2));
		resize(frameRightDown, frameRightDownNew, cv::Size(frameRightDown.cols / 2, frameRightDown.rows / 2));
		//新建Mat 用于图像合并
		cv::Mat frameOut = cv::Mat::zeros(frameLeftUp.rows, frameLeftUp.cols, frameLeftUp.type());
        //定义图像放的位置
		cv::Rect rectLeftUp = cvRect(0, 0, frameLeftUpNew.cols, frameLeftUpNew.rows);
		cv::Rect rectRightUp = cvRect(frameRightUpNew.cols, 0, frameRightUpNew.cols, frameRightUpNew.rows);
		cv::Rect rectLeftDown = cvRect(0, frameLeftDownNew.rows, frameLeftDownNew.cols, frameLeftDown.rows);
		cv::Rect rectRightDown = cvRect(frameRightDownNew.cols, frameRightDownNew.rows, frameRightDownNew.cols, frameRightDownNew.rows);
		//将调整尺寸的帧图像放置新建Mat的指定位置
		frameLeftUpNew.copyTo(frameOut(rectLeftUp));
		frameRightUpNew.copyTo(frameOut(rectRightUp));
		frameLeftDownNew.copyTo(frameOut(rectLeftDown));
		frameRightDownNew.copyTo(frameOut(rectRightDown));
		/*cv::imshow("frameOut.jpg", frameOut);
		cv::waitKey(0);*/
        //写入帧图像
		writer.write(frameOut);
	}
    //释放内存
	writer.release();
	videoLeftUp.release();
	videoRightUp.release();
	videoLeftDown.release();
	videoRightDown.release();

	system("pause");
	return 0;
}

2.运行结果

源视频图像首帧:

拼接视频图像首帧:

留作业:请尝试以下合并结果↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django姜太公渔具销售系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

看完这篇,还不懂JAVA内存模型(JMM)算我输

前言 开篇一个例子&#xff0c;我看看都有谁会&#xff1f;如果不会的&#xff0c;或者不知道原理的&#xff0c;还是老老实实看完这篇文章吧。 Slf4j(topic "c.VolatileTest") public class VolatileTest {static boolean run true;public static void main(Str…

一个简单的HTML网页 个人网站设计与实现 HTML+CSS+JavaScript自适应个人相册展示留言博客模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Ubtunu排查磁盘空间是否已满—并清理的方式

项目场景&#xff1a; 最近使用nodejs开发的后端项目部署到Ubtunu服务器后接口无法访问了&#xff0c;接口也调用不通&#xff0c;NGINX报502错误。 问题描述 使用远程连接工具传文件也是无法上传&#xff0c;提示找不到文件&#xff0c;SCP命令也无法上传。 scp传文件报错&…

一文教会你如何在内网搭建一套属于自己小组的在线 API 文档?

Hello&#xff0c;大家好&#xff0c;我是阿粉&#xff0c;对接文档是每个开发人员不可避免都要写的&#xff0c;友好的文档可以大大的提升工作效率。 阿粉最近将项目的文档基于 Gitbook 和 Gitlab 的 Webhook 功能的在内网部署了一套实时的&#xff0c;使用起来特方便了。跟着…

第二证券|11月十大牛股出炉 特一药业163%涨幅问鼎榜首

到11月30日收盘&#xff0c;11月份十大牛股中7只个股涨幅超过100%&#xff0c;涨幅最小的也有87%&#xff0c;均匀涨幅较上个月有所扩大。 11月&#xff0c;A股出现震荡爬高态势&#xff0c;到11月30日收盘&#xff0c;上证指数月内涨8.91%&#xff0c;深证成指涨6.84%&#xf…

大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

编号&#xff1a;27 基于STM32单片机的温湿度检测报警器&#xff08;数码管&#xff09; 功能描述&#xff1a; 本设计由STM32F103单片机最小系统DHT11温湿度传感器数码管显示模块声光报警模块独立按键组成。 1、主控制器是STM32F103单片机 2、DHT11传感器测量温度和湿度数据…

Android注解快速入门和实用解析

首先什么是注解&#xff1f;Override就是注解&#xff0c;它的作用是&#xff1a; 1、检查是否正确的重写了父类中的方法。2、标明代码&#xff0c;这是一个重写的方法。1、体现在于&#xff1a;检查子类重写的方法名与参数类型是否正确&#xff1b;检查方法private&#xff0f…

带你走进知识图谱的世界

知识图谱知识图谱的介绍01 什么是知识图谱02 知识图谱构建的关键技术03 知识图谱的存储04 知识图谱在金融领域的应用图数据库 Neo4j知识图谱的介绍 知识图谱最开始是Google为了优化搜索引擎提出来的&#xff0c;推出之后引起了业界轰动&#xff0c;随后其他搜索公司也纷纷推出…

[附源码]计算机毕业设计医疗器械公司公告管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MXNet中im2rec将图片转换成二进制RecordIO格式

我们在前面的 计算机视觉之目标检测训练数据集&#xff08;皮卡丘&#xff09;《2》其中有提到这个二进制的RecordIO格式&#xff0c;使用的是MXNet自带的im2rec工具&#xff0c;源码在tools里面 import mxnet as mx #D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\…

农大毕业7年后,转行软件测试,我拿到了一块结实的敲门砖

“经过这段时间的学习&#xff0c;让我摸清了这个行业的游戏规则&#xff0c;可以说是让我拿到了一块结实的敲门砖。” 今天跟大家分享的是近期就业的学员刘同学的转行故事&#xff0c;希望他的经历能给同样在向梦想奔跑的你一些帮助。 毕业7年后&#xff0c;从网信办主任转行…

基于STM32单片机的直流电机PWM调速(数码管显示)(Proteus仿真+程序)

编号&#xff1a;24 基于STM32单片机的直流电机PWM调速 功能描述&#xff1a; 由 STM32单片机数码管显示模块键盘模块L298N电机驱动模块直流电机 1、采用STM32F103单片机为主控制器 2、四个按键&#xff0c;分别为启动/暂停、方向切换、加速、减速功能 3、数码管显示PWM占空比…

[附源码]计算机毕业设计演唱会门票售卖系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SMART PLC高速脉冲输出如何断电保持当前位置

S7-200 SMART PLC脉冲轴控制相关的内容,可以参看下面的博客: S7-200 SMART PLC自定义脉冲轴控功能块AxisControl_FB(梯形图)_RXXW_Dor的博客-CSDN博客博途1200/1500PLC的相关总线轴PN总线控制可以参考相关专栏的博客,链接地址如下:博途PLC 1200/1500PLC轴控功能块Servo_A…

[附源码]Python计算机毕业设计Django基于Vuejs的中国名茶销售平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

历史名人鲁迅介绍HTML个人网页作业作品下载 历史人物介绍网页设计制作 大学生英雄人物网站作业模板 dreamweaver简单个人网页制作

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Java分布式系统和云计算教程

Java分布式系统和云计算教程 大规模学习分布式 Java 应用程序、并行编程、分布式计算和云软件架构 课程英文名&#xff1a;Distributed Systems & Cloud Computing with Java 此视频教程共4.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附…

【数据可视化】Data Reduction和加利福尼亚的房价数据集数据可视化以及Kettle的初步介绍

一.数据归约Data Reduction 对海量数据进行复杂的数据分析和机器学习将需要很长时间&#xff0c;使得这种分析不现实或不可行。数据归约技术可以用来得到数据集的归约表示&#xff0c;它小得多&#xff0c;但仍接近保持原数据的完整性。对归约后的数据集计算将更有效&#xff…