目录
前言
本文的方法是在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 ¤tValue, long &flags, long &defaultValue)
set接口:
bool videoInput::setVideoSettingFilter(int deviceID, long Property, long lValue, long Flags, bool useDefaultValue)
可以看到,里面都是通过dshow接口来获取及设置这些属性的:
// 获取
pAMVideoProcAmp->Get(Property, ¤tValue, &flags);
// 设置
hr = pAMVideoProcAmp->Set(Property, lValue, Flags);
dshow接口参考
Windows的dshow接口里,flag参数就是自动,手动的选项参数,参考:
我们看看,这个VideoProcAmpFlags是什么东西:
明白了吧,dshow接口set的第三个参数Flags,数值为1时表示自动,数值为2时表示手动。