OpenCv机器视觉OpenCV

opencv3自动白平衡:灰度世界和完美反射算法

2018-09-20  本文已影响4人  饮茶先啦靓仔

最近加入了一个无人机团队,任务是参加第六届国际无人机飞行器创新大奖赛(UAVGP)。由于需要跑视觉算法,团队买了块英伟达的TX2(壕...)。我做的方案是用色域分割,但是室外环境变化可能会比较大(冷暖,亮暗),所以需要用到白平衡算法让图片直方图保持正常。

TX2

1.算法原理

2.算法实现

调用opencv中的白平衡算法十分简单(前提是安装了扩展包),只需要创造一个opencv封装好的智能指针,然后再调用相应的create方法,就可以使用了。

/****************************************************************
 * WBexample.cpp
 * Created by 杨帮杰 on 7/30/18.
 * Right to use this code in any way you want without warranty,
 * support or any guarantee of it working
 * E-mail: yangbangjie1998@qq.com
 * Assication: SCAU 华南农业大学
 *****************************************************************/

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/xphoto/white_balance.hpp>

using namespace cv;
using namespace std;

#define PATH "/home/jacob/WBexample/testImage.jpg"

int main()
{
    Mat inputImage = imread(PATH);
    Mat grayWBImage = Mat::zeros(inputImage.size(),inputImage.type());
    Mat simpleWBImage = Mat::zeros(inputImage.size(),inputImage.type());

    //灰度世界算法
    Ptr<xphoto::WhiteBalancer> grayWB = xphoto::createGrayworldWB();
    grayWB->balanceWhite(inputImage, grayWBImage);

    //完美反射算法
    Ptr<xphoto::WhiteBalancer> simpleWB = xphoto::createSimpleWB();
    simpleWB->balanceWhite(inputImage, simpleWBImage);

    imshow("inputImage",inputImage);
    imshow("grayWBImage",grayWBImage);
    imshow("simpleWBImage",simpleWBImage);
    waitKey();
    return 0;
}

3.结果分析

结果如下


原图像 灰度世界 完美反射

完美反射算法的结果还是不错的,灰度世界嘛。。。咳咳。两个算法都有一定的局限性,后者比较好但速度会慢一点。顺带给自己挖个坑,下面链接中的有一个算法opencv没有实现,网上也没有找到比较好的开源代码。等哪天编程能力上去了,一定把这个算法实现一遍。

References:
https://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html
https://githuddb.com/opencv/opencv_contrib/blob/master/modules/xphoto/samples/color_balance.cpp

上一篇 下一篇

猜你喜欢

热点阅读