欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用

OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用

2024/11/1 3:31:03 来源:https://blog.csdn.net/jndingxin/article/details/142612719  浏览:    关键词: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,则表示初始化失败。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com