当前位置:   article > 正文

C++OpenCV——利用三种不同算法实现图像白平衡操作

C++OpenCV——利用三种不同算法实现图像白平衡操作

最近接了一个单子要求使用三种不同的算法实现图像的白平衡操作:本人选取了一下三种:

  • 灰度世界
  • 完美反射
  • 动态阈值

1.灰度世界

  1. Mat myFun::GM(Mat srcImage)
  2. {
  3. Mat dstImg;
  4. vector<Mat>Channels;
  5. split(srcImage, Channels);
  6. Mat B = Channels[0];
  7. Mat G = Channels[1];
  8. Mat R = Channels[2];
  9. double Baver = mean(B)[0];
  10. double Gaver = mean(G)[0];
  11. double Raver = mean(R)[0];
  12. double K = (Baver + Gaver + Raver) / 3;
  13. //每个通道的增益
  14. double Kb, Kg, Kr;
  15. Kb = K / Baver;
  16. Kg = K / Gaver;
  17. Kr = K / Raver;
  18. //白平衡处理后的通道
  19. Mat dstB, dstG, dstR;
  20. dstB = B * Kb;
  21. dstG = G * Kg;
  22. dstR = R * Kr;
  23. cout << mean(dstB)[0] << mean(dstG)[0] << mean(dstR)[0] << endl;
  24. //合并通道
  25. vector<Mat>dstChanges;
  26. dstChanges.push_back(dstB);
  27. dstChanges.push_back(dstG);
  28. dstChanges.push_back(dstR);
  29. merge(dstChanges, dstImg);
  30. return dstImg;
  31. }

2.完美反射

Mat myFun::PerfectReflectionAlgo
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/287347
推荐阅读
相关标签
  

闽ICP备14008679号