导 读
本文主要介绍OpenCV自带的三种白平衡算法使用(代码 + 效果)。
前 言
OpenCV xphoto模块中提供了三种不同的白平衡算法,分别是:灰度世界算法、完美反射算法和基于学习的白平衡算法。本文将介绍其使用方法并给出代码演示,供大家参考。
使用演示
因为xphoto模组是在OpenCV扩展部分,所以需要CMake编译contrib代码,这部分前面已介绍过多次,此处略过。下面是源码文件和编译后的头文件:
【1】灰度世界(GrayworldWB)-白平衡算法。
参考链接:
https://docs.opencv.org/4.x/d7/d71/classcv_1_1xphoto_1_1GrayworldWB.html#details
代码演示与效果:
// grayWorld_WhiteBalance.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){ Mat src = imread("F.png"); imshow("src", src); Ptr
效果对比(左:原图,右:白平衡算法结果图)
【2】完美反射(SimpleWB)-白平衡算法。
参考链接:
https://docs.opencv.org/4.x/d1/d8b/classcv_1_1xphoto_1_1SimpleWB.html#details
代码演示与效果:
#include
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){ Mat src = imread("F.png"); imshow("src", src); Ptr
效果对比(左:原图,右:白平衡算法结果图)
【3】基于学习的(LearningBasedWB)-白平衡算法。
参考链接:
https://docs.opencv.org/4.x/dc/dcb/tutorial_xphoto_training_white_balance.html
许多传统的白平衡算法都是基于统计的,即它们依赖于这样一个事实:某些假设应该在正确白平衡的图像中成立,例如众所周知的灰色世界假设。然而,通过在基于学习的框架中利用具有地面实况光源的大型图像数据集,通常可以获得更好的结果。下面如何训练基于学习的白平衡算法并评估结果的质量。
下载数据集进行训练。在本教程中,我们将使用Gehler-Shi 数据集。将所有 568 张训练图像提取到一个文件夹中。单独下载包含真实光源值 (real_illum_568..mat) 的文件。 我们将使用Python 脚本(learn_color_balance.py)进行训练。使用以下参数调用它: python learn_color_balance.py -i <包含训练图像的文件夹的路径> -g
简单来说就是通过给定数据集,一部分未经过白平衡矫正的图像,大概是下面这样:
目标图像也就是希望得到的白平衡矫正结果groundtruth,大概是下面这样,或者效果更好:
通过训练我们能得到一些参数,直接应用到新的图像上。训练好的参数模型保存到color_balance_model.yml文件中,使用时加载即可:
#include
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){ Mat src = imread("F.png"); imshow("src", src); Ptr
大家可以感兴趣的话可以自己尝试一下。
—THE END—
精彩文章
发表评论