#ifndef IMAGE_APPLY_BAR_CODE_RECOGNITION_H #define IMAGE_APPLY_BAR_CODE_RECOGNITION_H #include "ImageApply.h" class CImageApplyBarCodeRecognition : public CImageApply { public: enum class RecognizeMode { Single = 0, Multi }; enum class Direction { Horizontal, Vertical }; enum BarCodeType { ThreeOfNine = 0, ThreeOfFiveInterleaved = 1, ThreeOfFiveNonInterleaved = 2, Code93 = 3, Code128 = 4, Ucc128 = 5, CodaBar = 6, Upca = 7, Upce = 8, Ean8 = 9, Ean13 = 10, Postnet = 11, Pdf417 = 12, TwoOfFiveIndustrial = 13, TwoOfFiveMatrix = 14, TwoOfFiveDatalogic = 15, TwoOfFiveIata = 16, ThreeOfNineFullAscii = 17, CodaBarWithStartStop = 18, MaxiCode = 19, QrCode = 20 }; typedef struct BarCode_Info { int barCodeType; int barCodeLength; std::string barCodeText; int barCodeX; int barCodeY; int barCodeRotation; int barCdeConfidence; }BarCodeInfo; public: CImageApplyBarCodeRecognition(); CImageApplyBarCodeRecognition(RecognizeMode mode, Direction dir); virtual ~CImageApplyBarCodeRecognition(void); virtual void apply(cv::Mat& pDib, int side); inline BarCodeInfo result() { return m_result; } inline std::vector results() { return m_vector_result; } private: int recognize_ZXing(const cv::Mat& image, BarCodeInfo& result); int recognize_Zbar(const cv::Mat& image, BarCodeInfo& result); void decode(cv::Mat& image, BarCodeInfo& result); virtual void apply(std::vector& mats, bool isTwoSide) {} private: RecognizeMode m_mode; Direction m_direction; BarCodeInfo m_result; std::vector m_vector_result; }; #endif // IMAGE_APPLY_BAR_CODE_RECOGNITION_H