最近接了一个单子要求使用三种不同的算法实现图像的白平衡操作:本人选取了一下三种:
- 灰度世界
- 完美反射
- 动态阈值
1.灰度世界
Mat myFun::GM(Mat srcImage)
{
Mat dstImg;
vector<Mat>Channels;
split(srcImage, Channels);
Mat B = Channels[0];
Mat G = Channels[1];
Mat R = Channels[2];
double Baver = mean(B)[0];
double Gaver = mean(G)[0];
double Raver = mean(R)[0];
double K = (Baver + Gaver + Raver) / 3;
//每个通道的增益
double Kb, Kg, Kr;
Kb = K / Baver;
Kg = K / Gaver;
Kr = K / Raver;
//白平衡处理后的通道
Mat dstB, dstG, dstR;
dstB = B * Kb;
dstG = G * Kg;
dstR = R * Kr;
cout << mean(dstB)[0] << mean(dstG)[0] << mean(dstR)[0] << endl;
//合并通道
vector<Mat>dstChanges;
dstChanges.push_back(dstB);
dstChanges.push_back(dstG);
dstChanges.push_back(dstR);
merge(dstChanges, dstImg);
return dstImg;
}
2.完美反射
Mat myFun::PerfectReflectionAlgor