OpenCV视频I/O(2)视频采集类VideoCapture之检索视频流的各种属性函数get()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

返回指定的 VideoCapture 属性。
VideoCapture 的 get() 函数用于检索视频流的各种属性。这个函数允许你查询视频源的状态和配置,例如分辨率、帧率等。

函数原型


virtual double cv::VideoCapture::get
(
	int 	propId
)const

参数

  • 参数propId 来自 cv::VideoCaptureProperties 的属性标识符(例如,cv::CAP_PROP_POS_MSEC,cv::CAP_PROP_POS_FRAMES,…)或针对视频 I/O API 后端的附加标志。

示例:

  • cv::CAP_PROP_POS_MSEC:当前视频位置(以毫秒计)。
  • cv::CAP_PROP_POS_FRAMES:当前帧的位置(以帧计)。
  • cv::CAP_PROP_POS_AVI_RATIO:当前帧位置相对于视频长度的比例(0.0 到 1.0)。
  • cv::CAP_PROP_FRAME_WIDTH:视频帧的宽度(像素)。
  • cv::CAP_PROP_FRAME_HEIGHT:视频帧的高度(像素)。
  • cv::CAP_PROP_FPS:视频流的帧率(每秒帧数)。
  • cv::CAP_PROP_FOURCC:视频编解码器的四字符代码。
  • cv::CAP_PROP_FRAME_COUNT:视频流的总帧数。
  • cv::CAP_PROP_FORMAT:当前像素格式。
  • cv::CAP_PROP_MODE:当前输入模式。
  • cv::CAP_PROP_BRIGHTNESS:图像亮度(仅限某些设备)。
  • cv::CAP_PROP_CONTRAST:图像对比度(仅限某些设备)。
  • cv::CAP_PROP_SATURATION:图像饱和度(仅限某些设备)。
  • cv::CAP_PROP_HUE:图像色调(仅限某些设备)。
  • cv::CAP_PROP_GAIN:图像增益(仅限某些设备)。
  • cv::CAP_PROP_EXPOSURE:曝光(仅限某些设备)。
  • cv::CAP_PROP_CONVERT_RGB:是否应该自动将图像转换为 RGB。
  • cv::CAP_PROP_WHITE_BALANCE:白平衡(仅限某些设备)。
  • cv::CAP_PROP_RECTIFICATION:立体摄像机的校正标志。
  • cv::CAP_PROP_MONOCHROME:是否为黑白摄像机。
  • cv::CAP_PROP_SHARPNESS:图像锐度(仅限某些设备)。
  • cv::CAP_PROP_AUTO_EXPOSURE:自动曝光(仅限某些设备)。
  • cv::CAP_PROP_GAMMA:伽玛(仅限某些设备)。
  • cv::CAP_PROP_TEMPERATURE:色温(仅限某些设备)。
  • cv::CAP_PROP_TRIGGER:触发器模式(仅限某些设备)。
  • cv::CAP_PROP_TRIGGER_DELAY:触发延迟(仅限某些设备)。
  • cv::CAP_PROP_WHITE_BALANCE_BLUE_U:蓝平衡 U(仅限某些设备)。
  • cv::CAP_PROP_WHITE_BALANCE_RED_V:红平衡 V(仅限某些设备)。
  • cv::CAP_PROP_ZOOM:变焦(仅限某些设备)。
  • cv::CAP_PROP_FOCUS:聚焦(仅限某些设备)。
  • cv::CAP_PROP_GUID:设备的 GUID(仅限某些设备)。
  • cv::CAP_PROP_ISO_SPEED:ISO 速度(仅限某些设备)。
  • cv::CAP_PROP_BACKLIGHT:背光补偿(仅限某些设备)。

返回值

类型:取决于所请求的属性,可能是 double 或其他数值类型。
描述:返回指定属性的当前值。

注意

读取/写入属性涉及许多层。在这个过程中可能会发生一些意想不到的结果。
VideoCapture -> API 后端 -> 操作系统 -> 设备驱动程序 -> 设备硬件
返回的值可能与设备实际使用的值不同,或者它可能使用设备依赖的规则进行编码(例如,步长或百分比)。实际行为取决于设备驱动程序和 API 后端。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 使用默认摄像头(索引为 0),并指定使用默认后端
    cv::VideoCapture cap( 0 );

    // 检查是否成功打开了摄像头
    if ( !cap.isOpened() )
    {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    // 获取视频帧的宽度和高度
    double frameWidth  = cap.get( cv::CAP_PROP_FRAME_WIDTH );
    double frameHeight = cap.get( cv::CAP_PROP_FRAME_HEIGHT );

    // 获取帧率
    double fps = cap.get( cv::CAP_PROP_FPS );

    // 获取视频流的总帧数
    int frameCount = cap.get( cv::CAP_PROP_FRAME_COUNT );

    // 获取当前视频流的位置(毫秒)
    double positionMs = cap.get( cv::CAP_PROP_POS_MSEC );

    // 获取当前视频流的位置(帧)
    long positionFrames = static_cast< long >( cap.get( cv::CAP_PROP_POS_FRAMES ) );

    // 打印获取的信息
    std::cout << "Frame Width: " << frameWidth << std::endl;
    std::cout << "Frame Height: " << frameHeight << std::endl;
    std::cout << "FPS: " << fps << std::endl;
    std::cout << "Frame Count: " << frameCount << std::endl;
    std::cout << "Position (ms): " << positionMs << std::endl;
    std::cout << "Position (frames): " << positionFrames << std::endl;

    // 释放资源
    cap.release();

    return 0;
}

运行结果

Frame Width: 640
Frame Height: 480
FPS: 30
Frame Count: -1
Position (ms): 0
Position (frames): -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值