/*
* ====================================================
* 功能:消除文稿纸张底色
* 作者:刘丁维
* 生成时间:2020/11/30
* 最近修改时间:2021/04/14 v2.0 改为档位设置
* 2021/04/14 v2.1 调整方案,与LINUX方案保持一致。
* 2021/08/03 v2.2 自定义获取饱和度算法,避免不同opencv版本结果存在偏差。
* 2021/10/12 v2.3 重构算法,去除原来分档设定改为自动识别颜色,并去除底色。
* 2021/10/23 v3.0 重构算法。避开黑色背景(制作掩模),计算文稿平均底色,并进行增白。
* 2021/10/26 v3.1 构造函数增加参数,可设置生成掩模时的阈值。
* 2021/10/28 v3.2 重构算法,改用纯C++代码实现功能,提高处理速度。
* 2021/10/29 v3.3 优化算法,增加range参数。针对复杂内容的图像,能够有效甄别背景和非背景内容。
* 2022/03/08 v3.4 修复变量未初始化的BUG。
* 2022/10/22 v3.5 使opencv ROI的内存机制。
* 版本号:v3.5
* ====================================================
*/
#ifndef IMAGE_APPLY_FADE_BACKGROUND_COLOR_H
#define IMAGE_APPLY_FADE_BACKGROUND_COLOR_H
#include "ImageApply.h"
class CImageApplyAdjustColors;
class GIMGPROC_LIBRARY_API CImageApplyFadeBackGroudColor : public CImageApply
{
public:
///
/// 构造函数
///
/// 在自动识别增白参数的基础上,增加的偏移量。取值范围[-255, 255]
CImageApplyFadeBackGroudColor(int threshold = 100, int offset = 0, int range = 40);
virtual ~CImageApplyFadeBackGroudColor();
virtual void apply(cv::Mat& pDib, int side);
virtual void apply(std::vector& mats, bool isTwoSide);
private:
///
/// 除文稿底色算法,仅支持24位图像
///
/// 图像数据头指针
/// 图像宽度
/// 图像高度
/// 每行数据大小
/// 阈值。区分文稿和黑色背景。取值范围[0, 255],参考值为100
/// 文稿底色增亮偏移量,默认为0。值越大,背景越白,反之越暗
/// 背景色彩的浮动范围。要求大于等于1。值越大范围越大,更多的色彩被判定为底色并除色。参考值40
void fadeBackground(unsigned char* data, int width, int height, int bytesPerLine, int threshold, int offset, int range);
private:
int m_threshold;
int m_offset;
int m_range;
uchar m_table1[768];
uchar m_table2[768];
uchar m_table_rgb[3][256];
};
#endif // !IMAGE_APPLY_FADE_BACKGROUND_COLOR_H