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

embedded/2024/12/22 11:07:56/
  • 操作系统: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

http://www.ppmy.cn/embedded/121746.html

相关文章

Flask 实现登录状态持久化:让用户 1 天内无需重新登录

在开发 Web 应用时&#xff0c;用户登录状态的管理至关重要。默认情况下&#xff0c;Session 是临时的&#xff0c;一旦用户关闭浏览器&#xff0c;Session 通常会被清除&#xff0c;这意味着用户需要重新登录。然而&#xff0c;在许多应用场景中&#xff0c;我们希望实现持久化…

netty之Netty传输文件、分片发送、断点续传

前言 1&#xff1a;在实际应用中我们经常使用到网盘服务&#xff0c;他们可以高效的上传下载较大文件。那么这些高性能文件传输服务&#xff0c;都需要实现的分片发送、断点续传功能。 2&#xff1a;在Java文件操作中有RandomAccessFile类&#xff0c;他可以支持文件的定位读取…

使用rsync+jenkins实现服务自动部署全流程

项目背景&#xff1a;城市政务云服务器没有上k8s&#xff0c;所有后端服务都是原始方式部署启动 &#xff08;java -jar xxx.jar&#xff09;&#xff0c;那么有没有方式简化部署难度&#xff0c;实现自动部署&#xff1f;当然是有的&#xff0c;下面详细介绍&#xff08;以Cen…

uniapp实现图片上下浮动效果

实现效果 图片以Y轴进行上下浮动 实现代码 <template><view class"header"><view class"image-center"><image src"../../static/image/index_center.png" class"centers"></image></view><…

【MySQL】多表联合查询常见练习题

数据库表如下&#xff1a; teacher&#xff1a;老师表 course&#xff1a;课程表 student&#xff1a;学生表 class&#xff1a;班级表 sc&#xff1a;成绩表 一、根据上面5张表写sql语句 1. 查询” 01 “课程比” 02 “课程成绩高的学生的信息及课程分数 select student.…

Vue3 组件中使用 SCSS 变量

在 JavaScript 中不能直接使用 SCSS 变量。但是可以通过一些间接的方法来实现类似的效果。 一、使用 sass-extract 使用 sass-extract 库来提取 SCSS 变量并生成 JSON 文件&#xff0c;然后在 JavaScript 中读取这个 JSON 文件来获取变量值。 1. 安装 sass-extract npm ins…

HTTP 和 HTTPS 协议的区别?

在当今的互联网世界中&#xff0c;我们每天都在使用 HTTP 和 HTTPS 协议&#xff0c;但你是否认真了解它们之间的区别&#xff1f;在这篇博客中&#xff0c;我们将深入分析这两种协议的特点、优势及其适用场景&#xff0c;并提供一些示例代码来帮助大家更好地理解。 什么是 HT…

Go语言接口的基本概念

Go语言虽然并非传统意义上的面向对象语言&#xff0c;但它通过接口&#xff08;Interface&#xff09;和匿名组合&#xff08;Composition&#xff09;等机制&#xff0c;实现了类似面向对象编程中的多态性&#xff08;Polymorphism&#xff09;。接口和多态性是Go语言中非常重…