twain3/ImageProcess/ImageApplyMarkCrop.h

116 lines
4.9 KiB
C++
Raw Permalink 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.

/*
* ====================================================
* <20><><EFBFBD>ܣ<EFBFBD>Mark<72>㶨λ<E3B6A8>ü<EFBFBD><C3BC><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>Ծ<EFBFBD><D4BE>е<EFBFBD>mark<72><EFBFBD><E3A3AC><EFBFBD>о<EFBFBD>ƫ<EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>ù<EFBFBD><C3B9>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ܻ<EFBFBD>ʶ<EFBFBD><CAB6>ʧ<EFBFBD>ܣ<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ͳ<EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD>в<EFBFBD><D0B2>
* <20><><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ά
* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣺2020/5/22
* <20><><EFBFBD><EFBFBD>޸<EFBFBD>ʱ<EFBFBD>䣺2020/5/22 v1.0
2020/7/29 v1.1 <20>Ż<EFBFBD>Mark<72><6B>ʶ<EFBFBD><CAB6><EFBFBD>Լ<EFBFBD><D4BC>ĸ巽<C4B8><E5B7BD><EFBFBD>ж<EFBFBD>
2020/7/30 v1.1.1 <20>Ż<EFBFBD>Mark<72><6B>ʶ<EFBFBD><CAB6><EFBFBD>Լ<EFBFBD><D4BC>ĸ巽<C4B8><E5B7BD><EFBFBD>ж<EFBFBD>
2020/8/3 v1.2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mark<72><6B>ʶ<EFBFBD><CAB6><EFBFBD>ĸ巽<C4B8><E5B7BD>ԭ<EFBFBD><D4AD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>ĸ巽<C4B8><E5B7BD>
2020/8/12 v1.3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ծ<EFBFBD><D4BE>Ƿ<EFBFBD>Ϊָ<CEAA><D6B8><EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼ȷʶ<C8B7><CAB6>
apply<6C>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>barCode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EBB9A6>
2020/8/12 v1.4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECA3AC><EFBFBD>Ӳü<D3B2><C3BC>ӿڣ<D3BF><DAA3>ɽ<EFBFBD><C9BD>вü<D0B2><C3BC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
* <20><EFBFBD>ţ<EFBFBD>v1.4
* ====================================================
*/
#ifndef IMAGEMARKCROPAPPLY_H
#define IMAGEMARKCROPAPPLY_H
#include "ImageApply.h"
class CImageApplyMarkCrop
{
public:
//ʶ<><CAB6><EFBFBD>ĸ巽<C4B8><E5B7BD>ʽ
enum DirectionMethod
{
Trilateral_7Net, //<2F><><EFBFBD>߶<EFBFBD>λ<EFBFBD>ĸ巽<C4B8><E5B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Multilateral //<2F><>߶<EFBFBD>λ<EFBFBD>ĸ巽<C4B8><E5B7BD>
};
enum DPI : ushort
{
DPI_200 = 200,
DPI_300 = 300
};
enum DeviceModel
{
G400 = 2,
G300 = 3
};
enum Orientation
{
Default = 0,
Left_RT, //<2F><><EFBFBD><EFBFBD>ĸ巽<C4B8><E5B7BD>ʶ<EFBFBD><CAB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>7<EFBFBD><37>3markʶ<6B><CAB6>ʱ<EFBFBD><CAB1>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
Top_RB, //<2F><><EFBFBD><EFBFBD>ĸ巽<C4B8><E5B7BD>ʶ<EFBFBD><CAB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>7<EFBFBD><37>3markʶ<6B><CAB6>ʱ<EFBFBD><CAB1>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
Right_LB, //<2F><><EFBFBD><EFBFBD>ĸ巽<C4B8><E5B7BD>ʶ<EFBFBD><CAB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>7<EFBFBD><37>3markʶ<6B><CAB6>ʱ<EFBFBD><CAB1>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
Bottom_LT //<2F><><EFBFBD><EFBFBD>ĸ巽<C4B8><E5B7BD>ʶ<EFBFBD><CAB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>7<EFBFBD><37>3markʶ<6B><CAB6>ʱ<EFBFBD><CAB1>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
};
public:
CImageApplyMarkCrop(DeviceModel device, bool isCropped = true, double threshold = 20, int noise = 40, DPI dpi = DPI::DPI_200, DirectionMethod direction = DirectionMethod::Multilateral);
/*
* src [in]: ԭͼ
* dst [out]:<3A><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>صĽ<D8B5><C4BD>ͼ<EFBFBD><CDBC>
* markOri [in]: <20>ĸ巽<C4B8><E5B7BD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʽ
* barCode [in]: <20>Ƿ<EFBFBD><C7B7>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>Trilateral_7Netģʽ
* angle [out]:<3A><><EFBFBD><EFBFBD><EFBFBD>ĸ巽<C4B8><E5B7BD>ƫת<C6AB>Ƕȡ<C7B6><C8A1><EFBFBD>0<EFBFBD><30>90<39><30>180<38><30>270<37><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> 0<><30><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>
-1<><31>ԭͼΪ<CDBC>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7>ҵ<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>ô<EFBFBD><C3B4>󣩣<EFBFBD>
-2<><32>markС<6B><D0A1>3<EFBFBD><33>
-3<><33>ѡ<EFBFBD><D1A1>Multilateralģʽʱ<CABD><CAB1>mark<72><6B>С<EFBFBD><D0A1>4<EFBFBD><34>
-4<><34>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ŀ<EFBFBD><C4BF>ͼ<EFBFBD><CDBC><EFBFBD>С<EFBFBD><D0A1><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-5<><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int apply(const cv::Mat& src, cv::Mat& dst, Orientation markOri, bool barCode, int& angle);
inline DeviceModel getDeviceModel() { return m_device; }
inline void setDeviceModel(DeviceModel device) { m_device = device; }
inline bool isCropped() { return m_b_isCropped; }
inline void setCropped(bool cropped) { m_b_isCropped = cropped; }
inline double getThreshold() { return m_threshold; }
inline void setThreshold(double threshold) { m_threshold = threshold; }
inline int getNoise() { return m_noise; }
inline void setNoise(int noise) { m_noise = noise; }
inline DPI getDPI() { return m_dpi; }
inline void setDPI(DPI dpi) { m_dpi = dpi; }
inline const cv::Range getSizeRange() { return m_range; }
inline void setSizeRange(const cv::Range& range) { m_range = range; }
inline void setSizeRange(int low, int up) { m_range = cv::Range(low, up); }
private:
void findMarks(const std::vector<std::vector<cv::Point>>& contours, const cv::RotatedRect& region, const cv::Range& range,
std::vector<std::vector<cv::Point>>& marks, std::vector<cv::RotatedRect>& rrect);
bool isContainBarCode(const cv::Mat& image);
private:
DeviceModel m_device;
bool m_b_isCropped;
double m_threshold;
int m_noise;
DPI m_dpi;
cv::Range m_range;
DirectionMethod m_direction;
};
#endif // IMAGEMARKCROPAPPLY_H