mirror of http://192.168.1.51:8099/lmh188/twain3
116 lines
4.9 KiB
C++
116 lines
4.9 KiB
C++
/*
|
||
* ====================================================
|
||
|
||
* <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
|