使用OpenCV关闭USBCamera的自动白平衡

本文介绍如何在Windows上,针对opencv_3.4.14版本,改造代码以实现关闭USBCamera的自动白平衡。通过修改opencv源码,新增属性并实现get和set接口,使得程序能自动控制相机的白平衡设置,而不需要用户手动操作。
摘要由CSDN通过智能技术生成

目录

前言

背景知识

opencv里的属性set和get实现

dshow接口参考 

改造opencv

1. 增加一个自动白平衡的属性定义

 2. 在属性的get接口里添加读自动白平衡的实现

 3. 重新编译opencv后即可通过属性:

4. 使用示例


前言

本文的方法是在Windows平台上,opencv_3.4.14版本上实施并验证OK的。

VC环境下,在opencv里,通过设置属性“CV_CAP_PROP_WHITE_BALANCE_BLUE_U” 可以达到设置白平衡值的目的。

但无法通过这个属性关掉自动白平衡。

搜索到的多数方案,是对属性 CV_CAP_PROP_SETTINGS 置 1,将DShow的设置窗口调出来:

 

 我要的是程序自己去关闭自动白平衡(控制白平衡这一项后面的自动复选框),而不是让用户去手动开关。

背景知识

opencv里的属性set和get实现

打开OpenCV的源码: opencv_3.4.14\sources\modules\videoio\src\cap_dshow.cpp

接口:

double VideoCapture_DShow::getProperty(int propIdx) const

实现的是属性获取。

接口:

bool VideoCapture_DShow::setProperty(int propIdx, double propVal)

 实现的是属性设置。

 

这两个接口里都能找到:CV_CAP_PROP_WHITE_BALANCE_BLUE_U 这个属性的具体实现。

get接口:

bool videoInput::getVideoSettingFilter(int deviceID, long Property, long &min, long &max, long &SteppingDelta, long &currentValue, long &flags, long &defaultValue)

set接口: 

bool videoInput::setVideoSettingFilter(int deviceID, long Property, long lValue, long Flags, bool useDefaultValue)

 可以看到,里面都是通过dshow接口来获取及设置这些属性的:

// 获取
pAMVideoProcAmp->Get(Property, &currentValue, &flags);

// 设置
hr = pAMVideoProcAmp->Set(Property, lValue, Flags);

dshow接口参考 

Windows的dshow接口里,flag参数就是自动,手动的选项参数,参考:

IAMVideoProcAmp Interface

 

 我们看看,这个VideoProcAmpFlags是什么东西:

 明白了吧,dshow接口set的第三个参数Flags,数值为1时表示自动,数值为2时表示手动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值