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

cpp 复制代码
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() 来关闭已打开的文件或相机。

代码示例

cpp 复制代码
#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

cpp 复制代码
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) 相同。

cpp 复制代码
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,则表示初始化失败。

代码示例

cpp 复制代码
#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

cpp 复制代码
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,则表示初始化失败。

相关推荐
月白风清江有声1 小时前
爆炸仿真的学习日志
人工智能
华奥系科技2 小时前
智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
人工智能·物联网·智慧城市
R²AIN SUITE2 小时前
MCP协议重构AI Agent生态:万能插槽如何终结工具孤岛?
人工智能
b***25113 小时前
动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化
人工智能·科技·自动化
Gyoku Mint3 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
小和尚同志3 小时前
通俗易懂的 MCP 概念入门
人工智能·aigc
dudly3 小时前
大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略
人工智能·语言模型
zzlyx993 小时前
AI大数据模型如何与thingsboard物联网结合
人工智能·物联网
说私域4 小时前
定制开发开源AI智能名片驱动下的海报工厂S2B2C商城小程序运营策略——基于社群口碑传播与子市场细分的实证研究
人工智能·小程序·开源·零售
英英_4 小时前
视频爬虫的Python库
开发语言·python·音视频