code_device/hgdriver/ImageProcess/ImageApplyDiscardBlank.h

80 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* ====================================================
* 功能:空白页识别。
* 作者:刘丁维
* 生成时间2020/4/21
* 最近修改时间2020/4/21 v1.0
2020/8/12 v1.1 开放setIntensity和setMinArea取消isNormal标识位扩大setIntensity的设置范围从[2, 20]扩大到[1, 100]
2020/8/25 v1.1.1 纸张检测缩进从100像素调整到20像素
2020/10/16 v1.2 添加新接口,能够高效便捷判断图片是否为空白页
2020/10/19 v1.2.1 修复静态空白页判断识别误判的BUG
2021/04/13 v1.3.0 增加标准/票据标识位
2021/08/12 v1.3.1 添加防止不同opencv版本导致计算结果存在差异的代码。
2021/12/14 v1.3.2 重构算法。
2021/12/15 v1.3.3 微调参数。
2021/12/17 v1.3.4 增加背景色接口,实现对纯色纸张的空白页判定
2022/09/07 v1.3.5 修复部分参数传递的BUG
2022/09/19 v1.4 增加模糊处理,提高空白页的过滤能力
2022/09/19 v1.4.1 调整模糊处理步骤
2022/11/18 v1.4.2 调整默认参数
2022/11/29 v1.5 增加纸张杂点忽略功能
2022/12/03 v1.5.1 调整纸张杂点忽略逻辑,避免把细条纹(有效信息)给忽略掉;默认将图像按照灰度图进行识别。
2023/10/12 v1.6 添加新的空白页识别方案。采用JEPG文件大小判断是否为空白页。
2023/10/20 v1.6.1 优化JPEG文件大小判断空白页
2023/10/30 v1.7 调整JPEG文件大小判断空白页的算法接口
2023/11/04 v1.7.1 增加PNG二值化文件大小判断空白页的选项
2023/12/01 v1.8 取消JPEG/PNG文件大小判断空白页方案
2023/12/04 v1.9 提高算法效率。
2023/12/05 v1.9.1 修改错误代码;修改参数注释。
* 版本号v1.9.1
* ====================================================
*/
#ifndef IMAGE_APPLY_DISCARD_BLANK_H
#define IMAGE_APPLY_DISCARD_BLANK_H
#include "ImageApply.h"
class GIMGPROC_LIBRARY_API CImageApplyDiscardBlank : public CImageApply
{
public:
/// <summary>
/// 空白页识别
/// </summary>
/// <param name="pDib">原图</param>
/// <param name="threshold">轮廓阈值。取值范围[0, 255]</param>
/// <param name="edge">边缘缩进。取值范围[0, +∞]</param>
/// <param name="devTh">笔迹判定阈值。该阈值越低,越容易判定存在笔迹。取值范围[0, +∞]</param>
/// <param name="meanTh">文稿底色阈值。低于该阈值的文稿底色,直接视为非空白页(当为0时纯色文稿底色不作为判定条件当为255时纯色文稿均为非空白页)。取值范围[0, 255]</param>
/// <param name="dilate">忽略纸张杂点。取值3、5、7、9...</param>
CImageApplyDiscardBlank(double threshold = 40, int edge = 50, double devTh = 30, double meanTh = 0, int dilate = 3);
virtual ~CImageApplyDiscardBlank(void);
virtual void apply(cv::Mat& pDib, int side);
virtual void apply(std::vector<cv::Mat>& mats, bool isTwoSide);
/// <summary>
/// 空白页识别。根据图像内容进行识别。
/// </summary>
/// <param name="pDib">原图</param>
/// <param name="threshold">轮廓阈值</param>
/// <param name="edge">边缘缩进</param>
/// <param name="devTh">笔迹判定阈值。该阈值越低,越容易判定存在笔迹。</param>
/// <param name="meanTh">文稿底色阈值。低于该阈值的文稿底色,直接视为非空白页。</param>
/// <param name="dilate">忽略纸张杂点。≤1时不生效值越大越容易忽略杂点</param>
/// <returns>true为空白页false为非空白页</returns>
static bool apply(const cv::Mat& pDib, double threshold = 40, int edge = 50, double devTh = 30, double meanTh = 200, int dilate = 3);
private:
double m_threshold;
int m_edge;
double m_devTh;
double m_meanTh;
int m_dilate;
};
#endif // !IMAGE_APPLY_DISCARD_BLANK_H