detector.cpp
Go to the documentation of this file.
00001 #include "detector.h"
00002 #include <dmtx.h>
00003 
00004 namespace detectors{
00005 namespace datamatrix{
00006   Detector::Detector(){
00007   }
00008 
00009   bool Detector::detect(cv::Mat& image, int timeout, unsigned int offsetx, unsigned int offsety){
00010     bool detected = false;
00011     lines_.clear();
00012     message_.clear();
00013     polygon_.clear();
00014     DmtxRegion     *reg;
00015     DmtxDecode     *dec;
00016     DmtxImage      *img;
00017     DmtxMessage    *msg;
00018     DmtxTime       t;
00019 
00020     img = dmtxImageCreate(image.data, image.cols, image.rows, DmtxPack24bppRGB);
00021     //dmtxImageSetProp(img, DmtxPropImageFlip, DmtxFlipY);
00022 
00023     dec = dmtxDecodeCreate(img, 1);
00024     assert(dec != NULL);
00025 
00026     t = dmtxTimeAdd(dmtxTimeNow(), timeout);
00027     reg = dmtxRegionFindNext(dec, &t);
00028 
00029     if(reg != NULL) {
00030 
00031       int height;
00032       int dataWordLength;
00033       int rotateInt;
00034       double rotate;
00035       DmtxVector2 p00, p10, p11, p01;
00036 
00037       height = dmtxDecodeGetProp(dec, DmtxPropHeight);
00038 
00039       p00.X = p00.Y = p10.Y = p01.X = 0.0;
00040       p10.X = p01.Y = p11.X = p11.Y = 1.0;
00041       dmtxMatrix3VMultiplyBy(&p00, reg->fit2raw);
00042       dmtxMatrix3VMultiplyBy(&p10, reg->fit2raw);
00043       dmtxMatrix3VMultiplyBy(&p11, reg->fit2raw);
00044       dmtxMatrix3VMultiplyBy(&p01, reg->fit2raw);
00045       polygon_.push_back(cv::Point(p00.X + offsetx,image.rows-p00.Y + offsety));
00046       polygon_.push_back(cv::Point(p10.X + offsetx,image.rows-p10.Y + offsety));
00047       polygon_.push_back(cv::Point(p11.X + offsetx,image.rows-p11.Y + offsety));
00048       polygon_.push_back(cv::Point(p01.X + offsetx,image.rows-p01.Y + offsety));
00049 
00050       lines_.push_back(
00051                        std::pair<cv::Point,cv::Point>(
00052                                                       cv::Point(p00.X + offsetx,image.rows-p00.Y + offsety),
00053                                                       cv::Point(p10.X + offsetx,image.rows-p10.Y + offsety)
00054                                                       )
00055                        );
00056       lines_.push_back(
00057                              std::pair<cv::Point,cv::Point>(
00058                                                             cv::Point(p10.X + offsetx,image.rows-p10.Y + offsety),
00059                                                             cv::Point(p11.X + offsetx,image.rows-p11.Y + offsety)
00060                                                             )
00061                              );
00062       lines_.push_back(
00063                              std::pair<cv::Point,cv::Point>(
00064                                                             cv::Point(p11.X + offsetx,image.rows-p11.Y + offsety),
00065                                                             cv::Point(p01.X + offsetx,image.rows-p01.Y + offsety)
00066                                                             )
00067                              );
00068       lines_.push_back(
00069                              std::pair<cv::Point,cv::Point>(
00070                                                             cv::Point(p01.X + offsetx,image.rows-p01.Y + offsety),
00071                                                             cv::Point(p00.X + offsetx,image.rows-p00.Y + offsety)
00072                                                             )
00073                              );
00074       detected = true;
00075       msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);
00076       if(msg != NULL) {
00077         message_ = (const char*)msg->output;
00078         dmtxMessageDestroy(&msg);
00079       }
00080       dmtxRegionDestroy(&reg);
00081     }
00082       
00083     dmtxDecodeDestroy(&dec);
00084     dmtxImageDestroy(&img);
00085     return detected;
00086   }
00087 }
00088 }


visp_auto_tracker
Author(s): Filip Novotny
autogenerated on Fri Aug 28 2015 13:36:44