当前位置: 首页 > news >正文

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()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为视频捕获打开一个视频文件、捕获设备或 IP 视频流。 这是一个重载成员函数&#xff0c;提供给用户方便使用。它与上述函数的不同之处仅在于它所…...

vue3+vite@4+ts+elementplus创建项目详解

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

Python 从入门到实战34(实例2:绘制蟒蛇)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件&#xff0c;但 ADCP 后处理软件无法写入信息2.3…...

JAVA实现大写金额转小写金额

在金融行业中经常需要把大写金额转成小写金额&#xff0c;之前在一次开发中有个类似的需求&#xff0c;翻阅了好多博文&#xff0c;都没找到合适的&#xff0c;故没办法&#xff0c;就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue

TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#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 删除包 删除数据目录 参考&#xff1a; https://docs.mongoing.com/ 介绍…...

组合数求法汇总

一&#xff1a;递推求解 对于组合数&#xff0c;有此式&#xff1a; C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} Cnm​Cn−1m−1​Cn−1m​。 C n m C_{n}^{m} Cnm​ 可理解为 n n n 个数中选 m m m 个&#xff0c;不同的方案。对于第 n n n 个…...

Python知识点:在Python编程中,如何使用Joblib进行并行计算

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Joblib是一个Python库&#xff0c;它被设计用来提供轻便的并行计算解决方案&…...

matlab-对比两张图片的CIElab分量的差值并形成直方图

%对比两张图片的CIElab分量的差值并形成直方图&#xff0c;改个路径就能用&#xff0c;图片分辨率要一致 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、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…...

信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密

【题目链接】 洛谷 P8814 [CSP-J 2022] 解密 ybt 2087&#xff1a;【22CSPJ普及组】解密(decode) 【题目考点】 1. 数学&#xff1a;一元二次方程求根 【解题思路】 输入n&#xff0c;d&#xff0c;e&#xff0c;满足 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中&#xff0c;DCL&#xff08;Data Control Language&#xff0c;数据控制语言&#xff09;用于管理数据库用户和控制数据的访问…...

Java面试八股之认证授权

一、概念&#xff1a; 1、什么是认证&#xff1f;什么是授权&#xff1f; 认证 用于在系统登录时&#xff0c;验证身份的凭证&#xff0c;类似于账号、密码等。 授权 用户在访问资源时&#xff0c;根据权限的不同对资源访问程度不同。 2、什么是cookie&#xff1f;什么是…...

RCE_绕过综合

<aside> &#x1f4a1; 管道符 </aside> <aside> &#x1f4a1; 通配符绕过 </aside> **匹配任何字符串&#xff0f;文本&#xff0c;包括空字符串&#xff1b;*代表任意字符&#xff08;0个或多个&#xff09;? 匹配任何一个字符&#xff08;不…...

关于Generator,async 和 await的介绍

在本篇文章中我们主要围绕下面几个问题来介绍async 和await &#x1f370;Generator的作用&#xff0c;async 及 await 的特点&#xff0c;它们的优点和缺点分别是什么&#xff1f;await 原理是什么&#xff1f; &#x1f4c5;我的感受是我们先来了解Generator&#xff0c;在去…...

Redis数据库与GO(二):list,set

一、list&#xff08;列表&#xff09; list&#xff08;列表&#xff09;是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表&#xff0c; list是一个双向链表&#xff0c;其元素是有序的&#xff0c;元…...

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集成开发环境&#xff0c;是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能&#xff0c;以帮助初学者快速上手。 安装和配置 首先&#xff0c;需要下载并安装IntelliJ IDEA。在安装完成后&#xff0c;需要配置JDK&#xff…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

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…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...