当前位置: 首页 > 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,则表示初始化失败。

http://www.lryc.cn/news/453496.html

相关文章:

  • vue3+vite@4+ts+elementplus创建项目详解
  • Python 从入门到实战34(实例2:绘制蟒蛇)
  • Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
  • JAVA实现大写金额转小写金额
  • 如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
  • 【C++学习笔记 21】C++中的动态数组 vertor
  • MongoDB 快速入门+单机部署(附带脚本)
  • 组合数求法汇总
  • Python知识点:在Python编程中,如何使用Joblib进行并行计算
  • matlab-对比两张图片的CIElab分量的差值并形成直方图
  • (十七)、Mac 安装k8s
  • 信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密
  • 【重学 MySQL】四十八、DCL 中的 commit 和 rollback
  • Java面试八股之认证授权
  • RCE_绕过综合
  • 关于Generator,async 和 await的介绍
  • Redis数据库与GO(二):list,set
  • c++知识点总结
  • 无IDEA不Java:快速掌握Java集成开发环境
  • 9.30学习记录(补)
  • 移动应用中提升用户体验的因素
  • VS与VSCode的区别
  • 用Python和OpenCV实现人脸识别:构建智能识别系统
  • 微积分-反函数6.5(指数增长和衰减)
  • C初阶(十二)do - while循环 --- 致敬革命烈士
  • 从零开始:SpringBoot实现古典舞在线交流平台
  • AL生成文章标题指定路径保存:创新工具助力内容创作高效启航
  • java基础知识汇总
  • 2.点位管理|前后端如何交互——帝可得后台管理系统
  • Redis基础二(spring整合redis)