当前位置: 首页 > article >正文

OpenCV视频I/O(11)视频采集类VideoCapture之设置视频捕获设备的属性函数 set()的使用

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

算法描述

在 VideoCapture 中设置一个属性。
在OpenCV中,cv::VideoCapture::set() 函数用于设置视频捕获设备的属性。这些属性可以包括分辨率、帧率等。

函数原型

virtual bool cv::VideoCapture::set	
(
	int 	propId,
	double 	value 
)		

参数

  • 参数propertyId (int):
    • 描述:属性标识符,用于指定要设置的属性。
    • 示例:cv::CAP_PROP_FRAME_WIDTH(设置帧宽度)
  • 参数value (double):
    • 描述:要设置的属性值。
    • 示例:1280(设置宽度为1280像素)

属性标识符
propertyId 参数可以是以下常量之一(这里列出了一些常用的属性标识符):

cv::CAP_PROP_POS_MSEC:当前帧的位置(以毫秒为单位)
cv::CAP_PROP_POS_FRAMES:当前帧的位置(以帧数为单位)
cv::CAP_PROP_POS_AVI_RATIO:当前帧的位置(以比例为单位,范围0至1)
cv::CAP_PROP_FRAME_WIDTH:帧宽度(以像素为单位)
cv::CAP_PROP_FRAME_HEIGHT:帧高度(以像素为单位)
cv::CAP_PROP_FPS:帧率(每秒帧数)
cv::CAP_PROP_FOURCC:四字符代码(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(布尔值)

返回值

类型:bool
描述:返回值指示设置是否成功。如果返回 true,则表示设置成功;如果返回 false,则表示设置失败。

注意
即使返回 true,这也不能保证属性值已被捕获设备接受。参见 VideoCapture::get() 中的注释。

代码示例


#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;
    }

    // 设置帧宽度和高度
    cap.set( cv::CAP_PROP_FRAME_WIDTH, 640 );
    cap.set( cv::CAP_PROP_FRAME_HEIGHT, 480 );

    // 设置亮度和对比度
    cap.set( cv::CAP_PROP_BRIGHTNESS, 0.5 );  // 假设0到1之间的值
    cap.set( cv::CAP_PROP_CONTRAST, 0.5 );    // 假设0到1之间的值

    // 循环读取并显示视频帧
    while ( true )
    {
        // 创建一个 Mat 对象来存储视频帧
        cv::Mat frame;

        // 从视频流中读取下一帧
        if ( !cap.read( frame ) )
        {
            std::cout << "No frame grabbed." << std::endl;
            break;
        }

        // 检查是否成功读取到了帧
        if ( frame.empty() )
        {
            std::cout << "Frame is empty." << std::endl;
            break;
        }

        // 显示视频帧
        cv::imshow( "Camera Stream", frame );

        // 按 'q' 键退出循环
        if ( cv::waitKey( 1 ) == 'q' )
        {
            break;
        }
    }

    // 释放资源
    cap.release();
    cv::destroyAllWindows();

    return 0;
}

http://www.kler.cn/news/328590.html

相关文章:

  • Go语言入门:掌握基础语法与核心概念
  • 决策树的损失函数公式详细说明和例子说明
  • JS+HTML基础
  • 小徐影院:探索Spring Boot的影院管理
  • 您的计算机已被Lockbit3.0勒索病毒感染?恢复您的数据的方法在这里!
  • Windows 上安装 PostgreSQL
  • Qt界面优化——QSS
  • hystrix微服务部署
  • Raft 协议解读:简化分布式一致性
  • 美洽客户服务AI Agent 1.0,全渠道多场景赋能业务增长
  • linux 网络序
  • 快速实现AI搜索!Fivetran 支持 Milvus 作为数据迁移目标
  • 【Linux】进程概念-2
  • 给自己的项目(vue3)中添加 下雪/樱花飘落的背景
  • 复写零——双指针算法
  • 自制CANTool_DBC差异比较工具DBCCompare_原理介绍(四)
  • 【架构】prometheus+grafana系统监控
  • 鸿蒙开发知识点速记全解
  • Python数据分析工具: Scikit-learn用法示例
  • android.bp cc_test
  • 木舟0基础学习Java的第三十一天(SpringMVC,xml式和注解式开发,携带数据,取值,视图解析)
  • Selenium(1)-webUI自动化环境部署,基本元素定位
  • 大学学校用电安全远程监测预警系统
  • Verilog基础:时序调度中的竞争(四)(描述时序逻辑时使用非阻塞赋值)
  • 车辆重识别(注意力 U-Net:学习在哪些区域寻找胰腺)论文阅读2024/10/01
  • 单体到微服务架构服务演化过程
  • 无人机跟踪
  • [网络]抓包工具介绍 tcpdump
  • 15.面试算法-树基础
  • 【深度学习】低维向量映射到高维空间的方法