当前位置: 代码网 > it编程>前端脚本>Python > OpenCV自带的三种白平衡算法使用演示(代码 + 效果)

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

2024年08月04日 Python 我要评论
许多传统的白平衡算法都是基于统计的,即它们依赖于这样一个事实:某些假设应该在正确白平衡的图像中成立,例如众所周知的灰色世界假设。然而,通过在基于学习的框架中利用具有地面实况光源的大型图像数据集,通常可以获得更好的结果。python learn_color_balance.py -i <包含训练图像的文件夹的路径> -g <real_illum_568..mat的路径> -r 0,378 --num_trees 30 --max_tree_depth 6 --num_augmented 0。
导  读

    本文主要介绍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—

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com