OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
为视频捕获打开一个视频文件、捕获设备或 IP 视频流。
这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所接受的参数。
参数与构造函数 VideoCapture(const String& filename, int apiPreference = CAP_ANY) 相同。
open() 函数是 OpenCV 中 VideoCapture 类的一个成员函数,用于初始化视频捕获设备或打开一个视频文件。这个函数允许你在创建 VideoCapture 对象后动态地打开一个视频文件或设备。
函数原型1
virtual bool cv::VideoCapture::open
(const String & filename,int apiPreference = CAP_ANY
)
参数1
- 参数filename (const String&):
- 描述:指定要打开的视频文件路径或网络流地址。
- 示例:“video.mp4” 或 “rtsp://username:password@ipaddress:port/stream”
- apiPreference (int, 可选):
- 描述:指定用于打开视频文件或设备的后端标识符。
- 默认值:CAP_ANY (表示任何可用的后端)
- 示例:CAP_FFMPEG, CAP_V4L2, 等
返回值
如果文件已成功打开,则返回 true。
该方法首先调用 VideoCapture::release()
来关闭已打开的文件或相机。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 创建一个 VideoCapture 对象cv::VideoCapture cap;// 定义视频文件路径std::string filename = "video.mp4";// 尝试打开视频文件if ( !cap.open( filename ) ){std::cout << "Failed to open video file: " << filename << std::endl;return -1;}// 检查是否成功打开了视频文件if ( !cap.isOpened() ){std::cout << "Error opening video file: " << filename << std::endl;return -1;}// 循环读取并显示视频帧while ( true ){// 从视频流中读取下一帧cv::Mat frame;cap >> frame; // 或者使用 cap.read(frame);// 如果没有读取到帧,则退出循环if ( frame.empty() ){std::cout << "No frame grabbed." << std::endl;break;}// 显示视频帧cv::imshow( "Video Stream", frame );// 按 'q' 键退出循环if ( cv::waitKey( 1 ) == 'q' ){break;}}// 释放资源cap.release();cv::destroyAllWindows();return 0;
}
函数原型2
为视频捕获打开一个视频文件、捕获设备或 IP 视频流,并带有 API 偏好和参数。
这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所接受的参数。
params
参数允许指定额外的参数,这些参数编码为成对的形式(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。参见 cv::VideoCaptureProperties
。
virtual bool cv::VideoCapture::open
(const String & filename,int apiPreference,const std::vector< int > & params
)
参数2
- filename (const String&):
- 描述:指定要打开的视频文件路径或网络流地址。
- 示例:“video.mp4” 或 “rtsp://username:password@ipaddress:port/stream”
- apiPreference (int, 可选):
- 描述:指定用于打开视频文件或设备的后端标识符。
- 默认值:CAP_ANY (表示任何可用的后端)
- 示例:CAP_FFMPEG, CAP_V4L2, 等
- params (const std::vector&, 可选):
- 描述:允许指定额外的参数,这些参数编码为成对的形式(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。
- 默认值:空向量(表示不使用额外参数)
返回值
类型:bool
描述:返回值指示是否成功初始化了视频捕获。如果返回 true,则表示成功初始化;如果返回 false,则表示初始化失败。
函数原型3
为视频捕获打开一个摄像头。
这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所接受的参数。
参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY)
相同。
virtual bool cv::VideoCapture::open
(int index,int apiPreference = CAP_ANY
)
参数3
- index (int):
- 描述:指定要打开的摄像头设备的索引。通常,索引 0 表示系统中的第一个摄像头,索引 1 表示第二个摄像头,以此类推。
- 示例:0(表示第一个摄像头设备),1(表示第二个摄像头设备)
- apiPreference (int, 可选):
- 描述:指定用于打开视频设备的后端标识符。
- 默认值:CAP_ANY (表示任何可用的后端)
- 示例:CAP_FFMPEG, CAP_V4L2, 等
返回值3
类型:bool
描述:返回值指示是否成功初始化了视频捕获。如果返回 true,则表示成功初始化;如果返回 false,则表示初始化失败。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 创建一个 VideoCapture 对象cv::VideoCapture cap;// 定义摄像头设备索引int cameraIndex = 0; // 第一个摄像头设备// 尝试打开摄像头设备if ( !cap.open( cameraIndex, cv::CAP_ANY ) ){std::cout << "Failed to open camera at index: " << cameraIndex << std::endl;return -1;}// 检查是否成功打开了摄像头设备if ( !cap.isOpened() ){std::cout << "Error opening camera at index: " << cameraIndex << std::endl;return -1;}// 循环读取并显示视频帧while ( true ){// 从视频流中读取下一帧cv::Mat frame;cap >> frame; // 或者使用 cap.read(frame);// 如果没有读取到帧,则退出循环if ( frame.empty() ){std::cout << "No frame grabbed." << std::endl;break;}// 显示视频帧cv::imshow( "Camera Stream", frame );// 按 'q' 键退出循环if ( cv::waitKey( 1 ) == 'q' ){break;}}// 释放资源cap.release();cv::destroyAllWindows();return 0;
}
函数原型4
为视频捕获打开一个摄像头,带有 API 偏好和参数。
这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所接受的参数。
params
参数允许指定额外的参数,这些参数编码为成对的形式(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。参见 cv::VideoCaptureProperties
。
virtual bool cv::VideoCapture::open
(int index,int apiPreference,const std::vector< int > & params
)
参数4
- index (int):
- 描述:指定要打开的摄像头设备的索引。通常,索引 0 表示系统中的第一个摄像头,索引 1 表示第二个摄像头,以此类推。
- 示例:0(表示第一个摄像头设备),1(表示第二个摄像头设备)
- apiPreference (int, 可选):
- 描述:指定用于打开视频设备的后端标识符。
- 默认值:CAP_ANY (表示任何可用的后端)
- 示例:CAP_FFMPEG, CAP_V4L2, 等
- params (const std::vector&, 可选):
- 描述:允许指定额外的参数,这些参数编码为成对的形式(paramId_1, paramValue_1, paramId_2, paramValue_2, …)。
- 默认值:空向量(表示不使用额外参数)
返回值
类型:bool
描述:返回值指示是否成功初始化了视频捕获。如果返回 true,则表示成功初始化;如果返回 false,则表示初始化失败。
相关文章:
OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为视频捕获打开一个视频文件、捕获设备或 IP 视频流。 这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所…...

vue3+vite@4+ts+elementplus创建项目详解
1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置: 找到项目路径下的package.json目录下找到script对象下面添加一下代码: "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是:cnpm run serve 3…...

Python 从入门到实战34(实例2:绘制蟒蛇)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件,但 ADCP 后处理软件无法写入信息2.3…...
JAVA实现大写金额转小写金额
在金融行业中经常需要把大写金额转成小写金额,之前在一次开发中有个类似的需求,翻阅了好多博文,都没找到合适的,故没办法,就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…...
【C++学习笔记 21】C++中的动态数组 vertor
静态数组 首先来创建一个静态数组 #include <iostream> #include <string>struct Vertex {float x, y, z; };std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {stream << vertex.x << "," <&…...

MongoDB 快速入门+单机部署(附带脚本)
目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…...
组合数求法汇总
一:递推求解 对于组合数,有此式: C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} CnmCn−1m−1Cn−1m。 C n m C_{n}^{m} Cnm 可理解为 n n n 个数中选 m m m 个,不同的方案。对于第 n n n 个…...
Python知识点:在Python编程中,如何使用Joblib进行并行计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! Joblib是一个Python库,它被设计用来提供轻便的并行计算解决方案&…...
matlab-对比两张图片的CIElab分量的差值并形成直方图
%对比两张图片的CIElab分量的差值并形成直方图,改个路径就能用,图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); lab1 rgb2lab(I1); lab2 rgb2lab(I2); % 提取色度…...

(十七)、Mac 安装k8s
文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功,可以在浏览器访问3.2、如果没有跳转,需要单独安装 kubernetes-dashboard3.2.1、方式一:一步到位3.2.2、方式二:逐步进行 1、Enab…...
信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密
【题目链接】 洛谷 P8814 [CSP-J 2022] 解密 ybt 2087:【22CSPJ普及组】解密(decode) 【题目考点】 1. 数学:一元二次方程求根 【解题思路】 输入n,d,e,满足 n p ∗ q np*q np∗q e ∗ d ( p − 1 ) ( q − 1…...

【重学 MySQL】四十八、DCL 中的 commit 和 rollback
【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中,DCL(Data Control Language,数据控制语言)用于管理数据库用户和控制数据的访问…...
Java面试八股之认证授权
一、概念: 1、什么是认证?什么是授权? 认证 用于在系统登录时,验证身份的凭证,类似于账号、密码等。 授权 用户在访问资源时,根据权限的不同对资源访问程度不同。 2、什么是cookie?什么是…...
RCE_绕过综合
<aside> 💡 管道符 </aside> <aside> 💡 通配符绕过 </aside> **匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个)? 匹配任何一个字符(不…...

关于Generator,async 和 await的介绍
在本篇文章中我们主要围绕下面几个问题来介绍async 和await 🍰Generator的作用,async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 📅我的感受是我们先来了解Generator,在去…...

Redis数据库与GO(二):list,set
一、list(列表) list(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表, list是一个双向链表,其元素是有序的,元…...
c++知识点总结
1.把字符串a复制到b里面 #include<iostream> #include<string.h> using namespace std; int main() {char a[110],b[110];cin>>a;int n strlen(a);for(int i 0;i<n1;i){b[i] a[i];}cout<<b;return 0; }2.比较两个字符串的大小 如果a大返回1&…...

无IDEA不Java:快速掌握Java集成开发环境
IntelliJ IDEA是一种强大的Java集成开发环境,是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能,以帮助初学者快速上手。 安装和配置 首先,需要下载并安装IntelliJ IDEA。在安装完成后,需要配置JDKÿ…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...