93 lines
3.5 KiB
C++
93 lines
3.5 KiB
C++
/*
|
||
* ====================================================
|
||
|
||
* 功能:空白页识别。
|
||
* 作者:刘丁维
|
||
* 生成时间: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 优化JEPG文件大小判断空白页
|
||
* 版本号:v1.6.1
|
||
|
||
* ====================================================
|
||
*/
|
||
|
||
#ifndef IMAGE_APPLY_DISCARD_BLANK_H
|
||
#define IMAGE_APPLY_DISCARD_BLANK_H
|
||
|
||
#include "ImageApply.h"
|
||
|
||
class GIMGPROC_LIBRARY_API CImageApplyDiscardBlank : public CImageApply
|
||
{
|
||
public:
|
||
enum FileType
|
||
{
|
||
JPEG_COLOR,
|
||
JPEG_GRAY,
|
||
PNG_COLOR,
|
||
PNG_GRAY,
|
||
PNG_BINARAY
|
||
};
|
||
|
||
/// <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]</param>
|
||
/// <param name="dilate">忽略纸张杂点。≤1时不生效,值越大越容易忽略杂点。取值范围[1, +∞]</param>
|
||
CImageApplyDiscardBlank(double threshold = 40, int edge = 50, double devTh = 30, double meanTh = 200, int dilate = 11);
|
||
|
||
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);
|
||
|
||
/// <summary>
|
||
/// 空白页识别。根据jpeg文件大小进行判断。
|
||
/// </summary>
|
||
/// <param name="fileSize">J文件大小</param>
|
||
/// <param name="imageSize">图像大小</param>
|
||
/// <param name="flag">0为JPG + 彩色,1为JPG + 灰度,2为PNG + 彩色, 3为PNG + 灰度, 4为PNG + </param>
|
||
/// <returns></returns>
|
||
static bool apply(int fileSize, const cv::Size& imageSize, FileType type);
|
||
|
||
private:
|
||
double m_threshold;
|
||
int m_edge;
|
||
double m_devTh;
|
||
double m_meanTh;
|
||
int m_dilate;
|
||
};
|
||
|
||
#endif // !IMAGE_APPLY_DISCARD_BLANK_H
|