89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
/*
|
||
* ====================================================
|
||
|
||
* 功能:二值化处理
|
||
* 作者:刘丁维
|
||
* 生成时间:2020/4/21
|
||
* 最近修改时间:2020/5/28 v1.1 修改传统二值化算法,改用自定义局部自适应阈值算法
|
||
2020/5/29 v1.2 在传统二值化之前添加增强锐化效果,二值化之后增加除噪效果
|
||
2020/6/19 v1.3 编写自定义自适应阈值二值化;取消锐化处理;保留除噪效果
|
||
2020/12/21 v1.3.1 调整自适应阈值上下限
|
||
2020/12/21 v1.3.2 调整blockSize,从原来的51调整到25
|
||
2022/05/25 v1.3.3 调整blockSize和constant,对THRESH_BINARY同样有效
|
||
2023/11/22 v1.4 当THRESH_BINARY模式时,参数m_threshold作为THRESHOLD_LOW使用。
|
||
* 版本号:v1.4
|
||
|
||
* ====================================================
|
||
*/
|
||
|
||
#ifndef IMAGE_APPLY_BW_BINARAY_H
|
||
#define IMAGE_APPLY_BW_BINARAY_H
|
||
|
||
#include "ImageApply.h"
|
||
|
||
class GIMGPROC_LIBRARY_API CImageApplyBWBinaray:public CImageApply
|
||
{
|
||
public:
|
||
|
||
enum class ThresholdType
|
||
{
|
||
THRESH_BINARY = 0, //传统二值化
|
||
THRESH_OTSU, //大津阈值
|
||
|
||
ADAPTIVE_GAUSSIAN, //高斯局部自适应阈值
|
||
ADAPTIVE_MEAN, //均值局部自适应阈值
|
||
|
||
ERROR_DIFFUSION //错误扩散
|
||
};
|
||
|
||
/*
|
||
* type [in]:二值化模式
|
||
* threshold [in]:阈值,当选择THRESH_OTSU时无效
|
||
* blockSize [in]:ADAPTIVE_GAUSSIAN和ADAPTIVE_MEAN模式有效,表示局部观察块的宽度
|
||
* constant [in]:ADAPTIVE_GAUSSIAN和ADAPTIVE_MEAN模式有效,与blockSize形成比例关系,作为局部筛选阈值
|
||
*/
|
||
CImageApplyBWBinaray(ThresholdType type, int threshold = 120, int blockSize = 51, int constant = 41);
|
||
|
||
CImageApplyBWBinaray();
|
||
|
||
virtual ~CImageApplyBWBinaray(void);
|
||
|
||
virtual void apply(cv::Mat& pDib,int side);
|
||
|
||
virtual void apply(std::vector<cv::Mat>& mats, bool isTwoSide);
|
||
|
||
double getThreshold() { return m_threshold; }
|
||
|
||
ThresholdType getThresholdType() { return m_type; }
|
||
|
||
int getBlockSize() { return m_blockSize; }
|
||
|
||
double getConstant() { return m_constant; }
|
||
|
||
void setThreshold(double value) { m_threshold = value; }
|
||
|
||
void setThresholdType(ThresholdType type) { m_type = type; }
|
||
|
||
void setBlockSize(int value) { m_blockSize = value; }
|
||
|
||
void setConstant(double value) { m_constant = value; }
|
||
|
||
private:
|
||
|
||
void errorDiffuse(cv::Mat& image);
|
||
|
||
private:
|
||
double m_threshold;
|
||
|
||
ThresholdType m_type;
|
||
|
||
int m_blockSize;
|
||
|
||
double m_constant;
|
||
|
||
uchar* m_table;
|
||
};
|
||
|
||
#endif //!IMAGE_APPLY_BW_BINARAY_H
|
||
|