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