OpenCV自带的三种白平衡算法使用演示(代码 + 效果)

导  读

    本文主要介绍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 <iostream>#include <opencv2/opencv.hpp>#include <opencv2/xphoto/white_balance.hpp>
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){    Mat src = imread("F.png");    imshow("src", src);    Ptr<GrayworldWB> gw = createGrayworldWB();        Mat result;    gw->balanceWhite(src, result);    imshow("result", result);    waitKey();} 

效果对比(左:原图,右:白平衡算法结果图)

图片

图片

图片

图片

图片

    【2】完美反射(SimpleWB)-白平衡算法。

    参考链接:

https://docs.opencv.org/4.x/d1/d8b/classcv_1_1xphoto_1_1SimpleWB.html#details

图片

    代码演示与效果:‍​​​​​​​

#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/xphoto/white_balance.hpp>
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){    Mat src = imread("F.png");    imshow("src", src);        Ptr<SimpleWB> sw = createSimpleWB();    Mat result;    sw->balanceWhite(src, result);    imshow("result", result);    waitKey();} 

效果对比(左:原图,右:白平衡算法结果图)

图片

图片

图片

图片

图片

    【3】基于学习的(LearningBasedWB)-白平衡算法。

    参考链接:

https://docs.opencv.org/4.x/dc/dcb/tutorial_xphoto_training_white_balance.html

    许多传统的白平衡算法都是基于统计的,即它们依赖于这样一个事实:某些假设应该在正确白平衡的图像中成立,例如众所周知的灰色世界假设。然而,通过在基于学习的框架中利用具有地面实况光源的大型图像数据集,通常可以获得更好的结果。下面如何训练基于学习的白平衡算法并评估结果的质量。

  1. 下载数据集进行训练。在本教程中,我们将使用Gehler-Shi 数据集。将所有 568 张训练图像提取到一个文件夹中。单独下载包含真实光源值 (real_illum_568..mat) 的文件。

    图片

    图片

    图片

  2. 我们将使用Python 脚本(learn_color_balance.py)进行训练。使用以下参数调用它:

    python learn_color_balance.py -i <包含训练图像的文件夹的路径> -g <real_illum_568..mat的路径> -r 0,378 --num_trees 30 --max_tree_depth 6 --num_augmented 0

    这应该开始在前 378 个图像(整个数据集的 2/3)上训练模型。我们将模型的大小设置为每个特征 30 个回归树对,并将树深度限制为不超过 6。默认情况下,生成的模型将保存到 color_balance_model.yml

  3. 在构建 LearningBasedWB 实例时,通过传递其路径来使用经过训练的模型:

    Ptr<xphoto::LearningBasedWB> wb = xphoto::createLearningBasedWB (modelFilename);

简单来说就是通过给定数据集,一部分未经过白平衡矫正的图像,大概是下面这样:

图片

目标图像也就是希望得到的白平衡矫正结果groundtruth,大概是下面这样,或者效果更好:

图片

通过训练我们能得到一些参数,直接应用到新的图像上。训练好的参数模型保存到color_balance_model.yml文件中,使用时加载即可:

#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/xphoto/white_balance.hpp>
using namespace std;using namespace cv;using namespace cv::xphoto;
int main(){    Mat src = imread("F.png");    imshow("src", src);    Ptr<LearningBasedWB> lbw = createLearningBasedWB("color_balance_model.yml");     Mat result;    lbw->balanceWhite(src, result);    imshow("result", result);    waitKey();}

大家可以感兴趣的话可以自己尝试一下。

—THE END—

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Color Space

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值