code_device/hgdriver/ImageProcess/ImageApplyMarkCrop.h

116 lines
4.4 KiB
C
Raw Permalink Normal View History

2022-07-29 08:41:34 +00:00
/*
* ====================================================
* Mark点定位裁剪mark点使
*
* 2020/5/22
* 2020/5/22 v1.0
2020/7/29 v1.1 Mark点识别稿
2020/7/30 v1.1.1 Mark点识别稿
2020/8/3 v1.2 Mark点识别文稿方向稿
2020/8/12 v1.3
apply接口增加barCode参数
2020/8/12 v1.4
* v1.4
* ====================================================
*/
#ifndef IMAGEMARKCROPAPPLY_H
#define IMAGEMARKCROPAPPLY_H
#include "ImageApply.h"
class GIMGPROC_LIBRARY_API CImageApplyMarkCrop
{
public:
//识别文稿方向方式
enum DirectionMethod
{
Trilateral_7Net, //三边定位文稿方向(针对七天需求)
Multilateral //多边定位文稿方向
};
enum DPI : ushort
{
DPI_200 = 200,
DPI_300 = 300
};
enum DeviceModel
{
G400 = 2,
G300 = 3
};
enum Orientation
{
Default = 0,
Left_RT, //多边文稿方向识别时靠左为正7天3mark识别时缺角在右上为正
Top_RB, //多边文稿方向识别时靠上为正7天3mark识别时缺角在右下为正
Right_LB, //多边文稿方向识别时靠右为正7天3mark识别时缺角在左下为正
Bottom_LT //多边文稿方向识别时靠下为正7天3mark识别时缺角在左上为正
};
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]:
* markOri [in]: 稿
* barCode [in]: Trilateral_7Net模式
* angle [out]:稿090180270
* 0
-1
-2mark小于3个
-3Multilateral模式时mark点小于4个
-4
-5
*/
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