/*
	功能:图像去雾
	设计者:王家星
	修改时间:2015 05 15
*/

#pragma once
#include "stdafx.h"

// 情报数据通用结构
#include "QBStru.h"

// OpenCV
#include <opencv2\opencv.hpp>  
using namespace cv;


// 1. OpenCV结构下的图像去雾控制

//功能:图像去雾控制(OpenCV结构)
//输入:	1. img 输入图像
//		    2. A_MAX  控制去雾效果, A_MAX < 0 时,自适应计算(特别耗时); 有效范围【0,255】,异常值自适应
//		    3. degree 控制去雾效果, 有效范围【0,1】,异常值自适应

//输出:	1. HazeFree 输出图像
//          2. 返回值:处理成功返回true,失败返回false
bool DeHazeImg(const cv::Mat &img, cv::Mat &HazeFree, double A_MAX = -1, double degree = 0.78);



// 2. ImgStru结构下的图像去雾控制

//功能:图像去雾控制(ImgStru结构)
//输入:	1. src 输入图像结构体
//		    2. A_MAX  控制去雾效果, A_MAX < 0 时,自适应计算(特别耗时); 有效范围【0,255】,异常值自适应
//		    3. degree 控制去雾效果, 有效范围【0,1】,异常值自适应

//输出:	1. dst 输出图像结构体
//          2. 返回值:处理成功返回true,失败返回false
bool ImgStruDeHazeControl(ImgStru* src, ImgStru* dst, int A_MAX = -1, double degree = 0.78);




// 3. QBStru结构下的图像去雾控制
//功能:图像去雾控制
//输入:	1. qbData 通用情报数据结构体
//		    2. A_MAX  控制去雾效果, A_MAX < 0 时,自适应计算(特别耗时); 有效范围【0,255】
//		    3. degree 控制去雾效果, 有效范围【0,1】
//          3. bSrcFirst 默认时,优先处理srcImg, srcImg-->dstImg
//                       否则,优先处理dstImg,dstImg——>dstImg                         

//输出:	1. qbData 含图像去雾后图像的情报数据结构体
//          2. 返回值:处理成功返回true,失败返回false
//说明: 首先判断图像数据有效性标识位,无效时直接返回,不做任何处理;
bool QBStruDeHazeControl(QBStru *qbData, int A_MAX = -1, double degree = 0.78, bool bSrcFirst = true);