2022-07-29 08:41:34 +00:00
|
|
|
|
/*
|
|
|
|
|
* ====================================================
|
|
|
|
|
|
|
|
|
|
* 功能:折角检测。检测原理:计算纸张的理论四角顶点,到实际轮廓最小距离。当任意顶点到轮廓最小距离超过阈值,则判定为折角
|
|
|
|
|
* 作者:刘丁维
|
|
|
|
|
* 生成时间:2020/10/30
|
|
|
|
|
* 最近修改时间:2020/10/30 v1.0
|
|
|
|
|
* 2021/11/04 v1.1 增加背景抗噪机制,能够抗5像素的背景噪声
|
|
|
|
|
* 2022/07/15 v1.2 增加折角类型判断。区分普通折角,以及扫描不完整导致的折角
|
|
|
|
|
* 2022/07/21 v1.3 区分普通折角和越界折角判定条件。先判定是否为边界越界折角,若是,则报越界折角2;若不是再检测是否为普通折角,若是则报普通折角1。
|
|
|
|
|
* 2022/07/21 v1.3.1 先判定是否为普通折角,若是,则报普通折角1;若不是再检测是否为越界折角,若是则报越界折角2。
|
|
|
|
|
* 2022/07/22 v1.4 增加参数zoom_x,zoom_y。适应原图XY轴DPI不一致的问题。
|
|
|
|
|
* 版本号:v1.4
|
|
|
|
|
|
|
|
|
|
* ====================================================
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef IMAGE_APPLY_DOGEAR_DETECTION_H
|
|
|
|
|
#define IMAGE_APPLY_DOGEAR_DETECTION_H
|
|
|
|
|
|
|
|
|
|
#include "ImageApply.h"
|
|
|
|
|
|
|
|
|
|
class GIMGPROC_LIBRARY_API CImageApplyDogEarDetection : public CImageApply
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 折角检测默认构造函数,threshold = 40, zoom = 1.0, distance = 50
|
|
|
|
|
/// </summary>
|
|
|
|
|
CImageApplyDogEarDetection();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 折角检测构造函数
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="threshlod">二值化阈值</param>
|
|
|
|
|
/// <param name="zoom_x">原图X轴缩放比例,对于大尺寸图像而言通过zoom缩小图像可减少计算量。默认值1.0(不缩放)</param>
|
|
|
|
|
/// <param name="zoom_y">原图Y轴缩放比例,对于大尺寸图像而言通过zoom缩小图像可减少计算量。默认值1.0(不缩放)</param>
|
|
|
|
|
/// <param name="distance">理论顶点到实际轮廓最小距离的阈值,大于该阈值则判定为折角,默认值50(像素)</param>
|
|
|
|
|
CImageApplyDogEarDetection(double threshlod, double zoom_x = 1.0, double zoom_y = 1.0, double distance1 = 50, double distance2 = 50);
|
|
|
|
|
|
|
|
|
|
virtual ~CImageApplyDogEarDetection(void);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取检测结果。该函数须在调用apply之后使用。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>0为非折角;1为普通折角;2为可能是扫描不完整造成的折角</returns>
|
|
|
|
|
inline int getResult() { return m_result; }
|
|
|
|
|
|
|
|
|
|
virtual void apply(cv::Mat& pDib, int side);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
virtual void apply(std::vector<cv::Mat>& mats, bool isTwoSide);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
double m_threshold;
|
|
|
|
|
double m_zoom_x;
|
|
|
|
|
double m_zoom_y;
|
|
|
|
|
double m_distance1;
|
|
|
|
|
double m_distance2;
|
|
|
|
|
|
|
|
|
|
int m_result;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // IMAGE_APPLY_DOGEAR_DETECTION_H
|