opencv_c++学习(六)

news2024/12/25 8:54:35

一、视频加载与摄像头调用

视频、摄像头加载

VideoCapture(filename, CAP_ANY)

对以上实例解释如下:
若读取的为本地视频,则filename为视频名称,若读取的是摄像头数据,则为int类型的摄像头id。

视频属性的获取

视频属性可以通过get()函数获取。
在这里插入图片描述

视频中每一帧图像的获取

见文末案例

二、视频文件的保存

VideoWriter(fliename, fourcc, fps, framSize, isColor)

对以上实例进行解释:
filename:保存视频的地址和文件名,包含视频格式;
fourcc:压缩帧的4字符编解码器代码,详细参数在表2-7给出;
fps:保存视频的帧率,即视频中每秒图像的张数;
framSize:视频帧的尺寸;
isColor:保存视频是否为彩色视频;

三、读取视频的样例

int main() {

	//创建一个video对象
	VideoCapture video;

	//打开1.MP4文件
	video.open("./1.mp4");

	//判断视频是否打开成功
	if (video.isOpened())
	{
		cout << "错误" << endl;
		return -1;
	}

	//显示视频帧率
	video.get(CAP_PROP_FPS);

	//显示视频宽度
	video.get(CAP_PROP_FRAME_WIDTH);

	//显示每一帧的图像
	while (1)
	{
		Mat frame;
		video >> frame;

		if (frame.empty())
		{
			break;
		}
		//控制视频的快放与慢放,同时当视频读取完毕后会退出程序
		uchar c = waitKey(1000/ video.get(CAP_PROP_FPS));

		if (c == 'a')
		{
			break;
		}
	}
}		

四、读取并保存视频的样例

int main() {

	//创建一个video对象
	VideoCapture video;

	//打开1.MP4文件
	video.open("./1.mp4");

	//判断视频是否打开成功
	if (video.isOpened())
	{
		cout << "错误" << endl;
		return -1;
	}

	//显示视频帧率
	video.get(CAP_PROP_FPS);

	//显示视频宽度
	video.get(CAP_PROP_FRAME_WIDTH);

	//显示每一帧的图像

	Mat frame;
	video >> frame;

	if (frame.empty())
		{
		return -1;
		}

	//判断图像是否为彩色图像
	bool isColor = (frame.type() == CV_8UC3);

	//创建写对象的实例
	VideoWriter writer;

	//选择编码格式
	int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');

	//设置写入视频的帧率
	double fps = 25.0;

	//设置保存视频的文件名称
	string filename = "1.avi";

	//创建保存文件的视频流
	writer.open(filename, codec, fps, frame.size(), isColor);

	if (!writer.isOpened())
	{
		cout << "失败" << endl;
		return -1;
	}

	while (1)
	{
		//检测是否保存完毕
		if (!video.read(frame))
		{
			break;
		}
		//写入视频流
		writer.write(frame);

		//显示图像
		imshow("Live", frame);

		uchar c = waitKey(50);

		//按ESC退出循环
		if (c == 27)
		{
			break;
		}
	}
}

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

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

相关文章

手握美团offer,结果背调红灯,哭了....

相信很多人都会包装简历&#xff0c;尤其是工作经历&#xff0c;不过也有人会填一下虚假的背景信息&#xff0c;比如公司leader或HR&#xff0c;小公司没有实力过多进行背调&#xff0c;但是大企业就不同了&#xff0c;他们有方法了解到实际的情况。 背调包括候选人以往的经历…

RHCSA之Linux的安装步骤

目录 RHCSA之环境配置 需要的软件 VMwareWorkstation安装 1.打开VMwareWorkstation安装包 2.进入安装界面点击下一步 3. 在我接受许可协议打 √ 后&#xff0c;点击下一步 4.在安装位置选择更改 5. 更改目标安装位置&#xff0c;点击确定 6.疯狂点击下一步 8.点击安装 9.…

DDIM模型代码实现

背景 前面已经出了一系列的文章来介绍大模型、多模态、生成模型。这篇文章会从更微观和更贴近实际工作的角度下手。会给大家介绍下前面讲到的diffuiosn model具体怎么来实现。文章结构如下&#xff1a; 1.介绍Diffusion Model包括哪些零部件&#xff0c;这些零部件衔接关系 …

jvm梳理

jvm是一个虚拟机&#xff0c;用于运行java代码&#xff0c;类的编译到运行主要为一下&#xff1a; 通过javac.exe编译&#xff0c;产生class文件&#xff0c;然后通过类加载器加入jvm&#xff1a; 类加载器&#xff1a; 引导加载器&#xff1a;使用c编写&#xff0c;负责java的…

【高项】项目绩效域,信息文档配置与变更,标准与规范管理(第4版教材第18-19,24章,项目规范知识)

文章目录 1、配置与变更管理1.1 信息文档1.2 配置管理1.3 变更管理 2、标准规范&#xff08;合同管理&#xff0c;知识产权&#xff09;2.1 合同管理2.2 知识产权和标准规范&#xff08;合同法&#xff0c;招投标法&#xff0c;著作权法&#xff0c;政府采购法&#xff09;2.3 …

力扣算题Day17

110.平衡二叉树(递归很难理解,思维很重要) 下面才是做二叉树的一种正确思维&#xff1a; copy他人运行代码&#xff1a; class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right right class Solution:def judgeDepth(self, …

自底向上分析概述

4-8自底向上的分析概述_哔哩哔哩_bilibili &#xff08;开始准备期末考试&#xff09;&#xff08;可菜&#xff09; 移入-规约分析&#xff1a; 每次归约的符号串称为“句柄”&#xff0c;一旦句柄在栈顶形成&#xff0c;我们立即将它规约&#xff0c;因此每一步规约都是最左…

[JAVA EE]创建Servlet——继承HttpServlet类笔记2

创建Servlet的方式之一&#xff1a;继承HttpServlet类&#xff08;经常使用&#xff09; 如果请求方式为get请求则调用doGet()方法; 如果请求方式为post请求则调用doPost()方法。 开发中通常不会在两个方法中写重复的代码&#xff0c;会造成代码冗余。 Request 一、获取请求…

[前端基础]websocket协议

(1)websocket websocket(简写为ws),是一种轻量化的协议,经过最开始的握手阶段以后,前后端之间允许自由地发送信息不受限制(建议发送json字符串).虽然理论上这个东西是属于协议内容,但是已经被疯狂封装得像框架一样了. websocket协议具有天然的优势处理前端多线程并发,并且只需…

Android---Glide的基本使用

目录 Glide 基本使用 Glide 进阶 Glide 是一个快速高效的 Android 图片加载库&#xff0c;可以自动加载网络、本地文件&#xff0c;app 资源中的图片&#xff0c;注重于平滑的滚动。 Glide 第一次加载一张图片后&#xff0c;就会自动帮我们把这张图片加入到内存中进行管理。…

Linux内核同步之RCU机制基础

Why RCU 1. 中断与抢占 当一个进程被时钟中断打断后&#xff0c;kernel运行tick中断处理程序&#xff08;一般是top half&#xff09;&#xff0c;中断处理程序运行结束后&#xff0c;有两种情况&#xff1a; 之前的进程获得CPU继续运行。 另一个进程获得了CPU开始运行&…

AI智慧安监:打电话/玩手机智能检测,构筑安全生产新防线

1、方案背景 在油库、加油站、化工厂等场景中&#xff0c;安全生产是首要的监管问题&#xff0c;因为有易燃物品的存放&#xff0c;打电话很容易引起火灾爆炸等安全事故&#xff0c;造成巨大的生命和财产损失。因此&#xff0c;对人员行为的监管是安全的关键&#xff0c;在一些…

计算机图形学 | 实验六:旋转立方体

计算机图形学 | 实验六&#xff1a;旋转立方体 计算机图形学 | 实验六&#xff1a;旋转立方体Z-缓冲GLM函数库PVM矩阵PVM矩阵的使用 华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff09; 计算机图形学 | 实验六&#xff1a;旋转…

怎么看待QA(软件测试)漏测bug?

先抛出我的2个观点&#xff1a; 1、漏测不一定是测试的锅。但当问题发生时&#xff0c;测试第一时间不要去拒绝推卸责任&#xff0c;而是要先去解决漏测问题。 2、漏测问题的及时处理很重要&#xff0c;但是避免再次漏测更重要。 为了将此问题阐述的更清楚&#xff0c;我将通过…

SSM框架学习-DI依赖注入方式实例

DI依赖注入&#xff1a;依赖注入&#xff08;Dependency Injection, DI&#xff09;是一种设计模式&#xff0c;用于将一个对象所需要的其他对象的引用或依赖关系从代码中解耦出来&#xff0c;将其交由某个第三方来管理&#xff0c;使得对象本身更加独立&#xff0c;便于测试和…

使用读写锁提高并发

我们想要的是&#xff1a;允许多个线程同时读&#xff0c;但只要有一个线程在写&#xff0c;其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用&#xff1a; 只允许一个线程写入&#xff08;其他线程既不能写入也不能读取&#xff09;&#xff1b;没有写入时&#xf…

基于深度学习的三维重建网络PatchMatchNet(三):如何利用patchmatchnet完成自己场景的数据集制作与利用自己的数据完成三维重建工作

目录 1.如何使用本篇博客 1.1 patchmatchnet网络环境配置 1.2 colmap环境配置 2.如何利用colmap制作自己的三维重建数据集 2.1 采集数据 2.2 使用colmap计算位姿 2.3 转换位姿到MVS读取的格式 2.4 剔除离群图片 2.5 运用patchmatchnet进行三维重建 1.如何使用本篇博客 …

【MySQL】简单使用

数据库&#xff1a;文件&#xff0c;管理系统 类别&#xff1a;关系型&#xff0c;非关系型&#xff08;nosql&#xff09; C/S模式&#xff08;客户端服务器&#xff09; mysql登录 用户名&密码 默认管理员&#xff1a;root 登录&#xff1a;Linux管理员身份运行客户…

为什么二极管具有单向导通性

大家都知道二极管具有单向导通性&#xff0c;比如一个双极性的信号通过二极管后会变成一个单极性的信号。 为了弄清这个问题先来看一下二极管的构成。 在纯净的硅晶体中掺入五价元素&#xff0c;比如磷&#xff0c;就形成了N型半导体&#xff0c;掺入的五价元素多余的电子很容…

汉明码简单计算方法

正算 看一张图 其中标绿底色的为汉明码校验位&#xff0c;可以发现&#xff0c;这些位置的2进制里面只有一个1&#xff0c;其他位上都是0。 先说结论&#xff1a;校验位上的1在第几个位上&#xff0c;就会用来保证位置的2进制里面该位上为1的位置上的1的个数为偶数。 比如&…