#ifndef LIBQR_H #define LIBQR_H #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/core.hpp" #include "opencv2/calib3d.hpp" #include #include using namespace cv; using namespace std; typedef Mat CvImg; struct ProcessState { CvImg *orig; std::vector qr_points; float scale; Mat transform; CvImg preprocessed; CvImg straighten; Rect qr_rect_in_straighten; CvImg qr_straighten; CvImg dot_area; CvImg dot_area_gray; string qrcode = ""; double clarity; float laplacian_thres = 0.1; float sobel_thres = 15; int sharpness_method = 2; }; bool preprocess(ProcessState &ps); bool emblem_dot_angle(ProcessState &ps, cv::InputArray in, float &angle, std::string &qrcode, std::string &err); bool detect_qr(ProcessState &ps, float margin_ratio, bool warp, string &err); enum SimilarityAlg { CellWeight, FuzzyPixelCmp, }; double emblem_roi_similarity(SimilarityAlg alg, InputArray a, InputArray b, string &err); double laplacian(Mat &gray, string &err); static inline void showimg_(const char *title, Mat &img) { imshow(title, img); waitKey(0); } #define show(img) showimg_(#img, img) #endif