/* * ==================================================== * 功能:消除文稿纸张底色 * 作者:刘丁维 * 生成时间: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