一、知识点
1、VideoCapture类
  (1)、用于从视频文件、摄像机或图像序列中捕获视频帧。
  
  (2)、构造函数 VideoCapture(const String & filename, int apiPreference = CAP_ANY)
      a、filename可以是视频文件的名称(例如"video.avi"),可以是图像序列(例如"img%02.jpg", 它将读取"img00.jpg"、"img01.jpg"、"img02.jpg"等),还可以是URL。
      b、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
      
  (3)、构造函数 VideoCapture(int index, int apiPreference = CAP_ANY)
      a、打开摄像头进行视频拍摄。
      b、index是视频捕获设备的索引,默认摄像头传递0。
      c、apiPreference是实际执行捕获的API后端,VideoCaptureAPIs枚举值,如: CAP_ANY、CAP_FFMPEG、CAP_IMAGES等。
      
  (4)、成员函数 virtual bool read(OutputArray image)
      a、抓取、解码并返回一个视频帧。
      b、image为返回的视频帧。 如果没有抓取任何帧,则图像为空,返回false。
  
  (5)、成员函数 virtual void release();
      a、关闭视频文件或捕获设备。
      
  (6)、成员函数 double get(int propId) const;
      a、用于检索视频流的各种属性值。
      b、propId是VideoCaptureProperties枚举值。
      c、VideoCaptureProperties的具体值如:
        CAP_PROP_FRAME_WIDTH=3,//视频流中帧的宽度
        CAP_PROP_FRAME_HEIGHT=4,//视频流中帧的高度
        CAP_PROP_FPS=5,//帧率
        CAP_PROP_FOURCC=6,//4个字符的编解码器代码
        CAP_PROP_FRAME_COUNT=7,//视频文件中的帧数
        
      
2、视频分辨率
  (1)、P,Progressive,逐行扫描,即视频纵向的像素行数。
      如720P,分辨率为1280 * 720像素。
      如1080P,分辨率为1920 * 1080像素。
  (2)、K,视频横向的像素列数。
      如2K,分辨率为2560 * 1440像素。
      如4K,分辨率为3840 * 2160 或 4096 * 2160像素。
      如8K,分辨率为7680 * 4320像素。
  (3)、MP,百万像素,即像素行数和列数相乘后的结果。
      如2MP,是1920 * 1080 = 2073600像素,约等于2MP。
  (4)、超高清(Ultra HD),4K分辨率,3840 * 2160。
      全高清(Full HD),1080P分辨率,1920 * 1080。
      高清(HD),720P分辨率,1280 * 720。
      标清(SD),480P分辨率,720 * 480。
      
3、视频码率
  (1)、码率指视频在单位时间内传输或处理的数据量,单位通常是比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)。
  (2)、它是影响视频质量和文件大小的核心参数。
  (3)、码率的本质是视频数据压缩程度的体现,在视频编码过程中,编码器通过算法将原始图像信息压缩为更小的数据流。
  (4)、码率越高,压缩程度越低,图像细节保留越多,文件体积越大; 反之,低码率会牺牲画质但节省存储空间和带宽。
  
4、视频帧速率
  (1)、视频帧速率,简称FPS,代表视频每秒内显示的图像帧数。
  (2)、帧速率越高,画面越流畅,但也需要更多的数据量来存储和传输。
  
5、视频分辨率、码率、帧速率关系:
  (1)、相同分辨率和帧速率下,码率越高,视频画面质量越出色。
  (2)、相同的分辨率和码率下,合理范围内,帧速率越高,视频画面流畅度越好。(超出合理范围容易出现卡顿)
  (3)、相同的帧速率和码率下,合理范围内,分辨率越高,视频画面清晰度越高。(超出合理范围容易出现噪点和模糊)
  
6、VideoWriter类
  (1)、用于编写视频文件或图像序列。
  (2)、构造函数 VideoWriter(const String & filename, int fourcc, double fps, Size frameSize, bool isColor = true)
      filename: 输出视频文件的名称。
      fourcc: 压缩帧的编解码器。
      fps: 输出视频流的帧率。
      frameSize: 视频帧的大小。
      isColor: true编码器期望编码彩色帧,false使用灰度帧。
  (3)、成员函数 virtual void write(InputArray image)
      a、将指定的图像写入视频文件。
      b、image表示要写入的图像,一般彩色图像采用BGR格式,大小和构造时指定的frameSize一样。
  (4)、virtual void release()
      a、释放资源。
      
7、注意:
  (1)、OpenCV不处理音频。
  (2)、OpenCV处理视频有大小限制,理论上不要超过2G。


二、示例代码

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::VideoCapture capture("../images/video.mp4");double frame_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);double frame_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);double count = capture.get(cv::CAP_PROP_FRAME_COUNT);double fps = capture.get(cv::CAP_PROP_FPS);std::cout << "frame_width = " << frame_width << std::endl;std::cout << "frame_height = " << frame_height << std::endl;std::cout << "count = " << count << std::endl;std::cout << "fps = " << fps << std::endl;cv::VideoWriter writer("C:/Users/ml/Desktop/new_video.mp4", capture.get(cv::CAP_PROP_FOURCC), fps, cv::Size(frame_width, frame_height), true);cv::Mat frame;while (true){capture.read(frame);if (frame.empty()){break;}cv::imshow("视频演示", frame);writer.write(frame);//此处时间影响"视频演示"窗口的图片流显示快慢int c = cv::waitKey(33);if (c == 27){break;}}capture.release();writer.release();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】字符串之二进制求和、字符串相乘

文章目录 算法原理二进制求和题目链接题目描述解题思路代码 字符串相乘题目链接题目描述解题思路代码 算法原理 这两道题都是属于算法里一种经典题型&#xff1a;高精度加/减/乘/除法&#xff0c;需要我们模拟加/减/乘/除 列竖式运算。 二进制求和 题目链接 题目链接 题目描…

MongoDB:索引

目录 1、索引数据结构&#xff1a;B-树 2、索引类型 2.1 单字段索引 2.2 复合索引&#xff08;最重要&#xff01;&#xff09; 2.3 多键索引&#xff08;数组字段&#xff09; 2.4 地理空间索引 2.5 全文索引 2.6 哈希索引&#xff08;分片专用&#xff09; 2.7 TTL …

【大模型】Transformer架构完全解读:从“盲人摸象“到“通晓万物“的AI进化论

&#x1f916; Transformer架构完全解读&#xff1a;从"盲人摸象"到"通晓万物"的AI进化论 —— 一位大模型探索者的技术日记 ☕ 第一章&#xff1a;为什么说Transformer是AI界的"蒸汽机革命"&#xff1f; 1.1 从RNN到Transformer&#xff1a;…

JavaEE:使用JMeter进行接口并发测试

一、下载与安装&#xff1a; 1.下载apache-jmeter-5.6.3.zip&#xff1a; https://jmeter.apache.org/download_jmeter.cgi 2.解压到D:\Program Files\apache-jmeter-5.6.3目录 3.添加JDK环境配置到D:\Program Files\apache-jmeter-5.6.3\bin\jmeter.bat文件开头&#xff1…

【笔记】MSYS2 的 MinGW64 环境中正确安装 Python 相关环境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)

MSYS2 环境配置与 Python 项目依赖管理笔记_msys更新python-CSDN博客 【技术笔记】MSYS2 指定 Python 版本安装方案_pacman -u 安装指定版本-CSDN博客 更多关于 MSYS2 开发环境的配置&#xff0c;请查看往期笔记。 简介 本笔记将记录我们在 MSYS2 的 MinGW64 环境中安装 Pytho…

ubuntu添加域名解析服务器地址

在 Ubuntu 中配置域名解析主要有两种方式&#xff1a;静态修改 /etc/hosts 文件 和 动态修改 DNS 解析服务器配置。以下是详细操作指南&#xff1a; 建议优选:二、永久方案&#xff1a;修改 DNS 解析服务&#xff08;推荐&#xff09;中的方法1 一、临时方案&#xff1a;修改…

通过 AIOps 、生成式 AI 和机器学习实现更智能的可观测性

支持 AIOps 的理由 人工智能运维&#xff08;AIOps&#xff09;是将人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和分析技术应用于提升 IT 运维团队日常工作的过程。简单来说&#xff0c;AIOps 是软件系统通过 AI 和 ML 以及相关分析技术来简化和…

【DataWhale组队学习】AI办公实践与应用

AI办公-PPT制作 1. 使用大模型制作PPT的常见流程 使用大模型生成PPT的文稿将文稿的内容喂给可以直接生成PPT的大模型&#xff0c;生成PPT 2. 使用大模型生成PPT文稿 我们可以先使用上一章提过的那些大模型去生成一个PPT的文稿。那根据上一章的内容&#xff0c;我们想要去让…

人机融合智能 | 人智交互中的机器行为设计与管理

以人工智能为代表的科学技术正在深入地塑造和改变着人类的社会、文化和经济等,在“无所不在的算法与智能”的时代,了解智能机器的行为对于设计智能行为并使其造福于人类,对于智能机器的设计者、开发者和使用者,都具有重要意义。机器行为研究从学科交叉的视角,将智能机器行为置于…

langChainv0.3学习笔记(高级篇)

目录 工具创建工具从函数创建工具tool 装饰器结构化工具 从可运行对象创建工具子类化 BaseTool如何创建异步工具处理工具错误返回工具执行的artifact 使用内置工具和工具包自定义默认工具如何使用内置工具包 使用聊天模型调用工具定义工具模式Python 函数LangChain 工具Pydanti…

UiAutomator2 与 Appium 对比分析:安卓自动化测试框架的选择指南

目录 一、基础介绍UiAutomator2Appium 二、功能对比三、架构差异UiAutomator2 架构简图&#xff1a;Appium 架构简图&#xff1a; 四、使用场景分析五、优缺点总结UiAutomator2 优点&#xff1a;UiAutomator2 缺点&#xff1a;Appium 优点&#xff1a;Appium 缺点&#xff1a; …

缺失的第一个正整数

继续每日一题 今天给大家带来一道将数组视为哈希表的算法 题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 题目示例&#xff1a; 由于题目要求…

单例模式-Python示例

单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中一种创建型模式&#xff0c;广泛应用于软件开发中。一以下以故事化的方式&#xff0c;结合详细的技术讲解&#xff0c;介绍单例模式的背景、定义、适用场景&#xff0c;并提供python的示例代码。 故事…

啥是 SaaS

https://www.youtube.com/watch?vnpcL7oRZQlI这个视频讲了什么东西&#xff0c; 什么 idea?好的&#xff0c;这个视频内容非常棒&#xff0c;信息量很足。下面为你详细总结视频讲了什么&#xff0c;以及核心的 Idea 是什么。 视频核心 Idea 这个视频讲的是一位名叫 Leandro…

Spring Boot 工程启动以后,我希望将数据库中已有的固定内容,打入到 Redis 缓存中,请问如何处理?

在 Spring Boot 工程中&#xff0c;将数据库中的固定内容预先加载到 Redis 缓存中可以通过以下步骤实现。这里假设你已经配置好了 Spring Data Redis 和数据库&#xff08;如 MySQL&#xff09;的连接。 1. 添加依赖 首先&#xff0c;确保你的 pom.xml&#xff08;Maven&…

springboot企业级项目开发之项目测试——集成测试!

集成测试 集成测试是指项目代码在单元测试完成后进行的第二阶段测试。集成测试的重点是在集成组件或单元之间交互时暴露缺陷&#xff0c;以保证不同模块之间相互调用的正确性。在Spring Boot的项目集成测试中&#xff0c;将测试Controller和Dao的完整请求处理。应用程序在服务…

HTML 媒体(Media)

HTML 媒体&#xff08;Media&#xff09; 引言 HTML 媒体元素是构成现代网页的重要组成部分&#xff0c;它允许我们在网页中嵌入各种类型的媒体内容&#xff0c;如音频、视频、图像等。这些元素不仅丰富了网页的视觉效果&#xff0c;还提升了用户体验。本文将详细介绍 HTML 媒…

轻量化分布式AGI架构:基于区块链构建终端神经元节点的互联网智脑

一、架构概述 该架构通过将终端设备&#xff08;如手机、IoT设备&#xff09;转化为神经元节点&#xff0c;结合区块链技术构建去中心化智能网络&#xff0c;形成“互联网智脑”。其核心在于突破传统AGI算力瓶颈&#xff0c;实现数据安全共享与价值分配。 1.1 关键特征 分布…

【知识图谱构建系列6】:借了张显卡先跑着

文章目录 前情提要mistral模型运行代码前情提要 之前咱对LLM4KGC的代码稍作修改,目标是用modelscope来下载模型。 现在这个代码终于能跑了。 前面咱说,我们的显卡只有6G的显存。现在呢,我也成功借到了A100的显卡。这下,咱可以先跑跑这个项目默认带的mistral模型。 mist…

从零开始手写redis(16)实现渐进式 rehash map

手写 Redis 系列 java从零手写实现redis&#xff08;一&#xff09;如何实现固定大小的缓存&#xff1f; java从零手写实现redis&#xff08;三&#xff09;redis expire 过期原理 java从零手写实现redis&#xff08;三&#xff09;内存数据如何重启不丢失&#xff1f; jav…