VC++识别Data-Matrix格式的二维码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wangduanqiugao/article/details/78696337

本望断在图像识别Data-Matrix格式的二维码

根据此编写出的识别QR-Code和Data-Matrix的二维码(库)

http://download.csdn.net/download/wangduanqiugao/10141924

本秋高使用到的软件工具:VS2010  opencv1.0  libdmtx-0.7.4  (使用以上现有库直接实现功能)

VS2010就不用说了;使用opencv1.0版本以上的也可以,此部分作基础就不进行阐述

libdmtx-0.7.4版本下载网址:
https://sourceforge.net/projects/libdmtx/files/latest/download?source=typ_redirect

libdmtx-0.7.4直接为文件,需要建立静态库编译再添加到VS2010


二、
1. 新建一个VS2010静态库Project(建议选择Win 32 Project),步骤单击Static library;选含Precompiled header

2. 将../libdmtx-0.7.4文件夹下所有的.h、.c文件增加到此project中,修改属性Not Using Precompiled Headers和Compile as C Code(/TC)

3. VS2010工程项目属性中:C/C++\General\Additional Include Directories 添加路径——..\libdmtx-0.7.4

4. 将#include "dmtx.h"和#include "dmtxstatic.h"两个头文件分别添加到静态库工程里面的每一个.c文件里

5. 将float.h、stdio.h、limits.h、assert.h、math.h文件增加到dmtx.h中;注释掉dmtx.c文件里包括的.c文件
 
6. 将项目查找到CHKERR、CHKSCHEME、CHKSIZE、CALLBACK_MATRIX、ISDIGIT、CALLBACK_POINT_PLOT的定义中复制到dmtx.h中

7. 将静态库程序里面的snprintf函数用sprintf_s函数替代

8. 对于错误C2129,处理办法是将声明和实现中的所有该函数“static”都去掉,可按提示查找修改

完成以上编译通过;即可得出LIB静态库了;再复制dmtx.h一起给程序调用
VS2010工程项目属性中:Linker\Input\ Additional Directories 添加文件——LIB静态库

#include "dmtx.h"
using namespace std;
bool wangduanqiugao_Data_Matrix(IplImage *Image, char *Information)
{	
  IplImage *pSrcImage = cvCloneImage(Image);
    
  CvMat matheader;
  CvMat * img = cvGetMat(pSrcImage, &matheader);

  int width = img->cols;  
  int height = img->rows;    
  uchar *raw = img->data.ptr;     

    DmtxImage* imge = dmtxImageCreate(raw, width, height, DmtxPack24bppRGB);  

    if(!imge)
    {
      cvReleaseImage(&pSrcImage);
      return false;
     }

    DmtxDecode* dec = dmtxDecodeCreate(imge, 1);  
 
    if(!dec)
    {
      cvReleaseImage(&pSrcImage);
      return false;
     }

    DmtxRegion* reg = dmtxRegionFindNext(dec, nullptr);  

    if(!reg)
    {
      cvReleaseImage(&pSrcImage);
      return false;
     }
 
    DmtxMessage* msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);  

    if(!msg)
    {
      cvReleaseImage(&pSrcImage);
      return false;
     }

    string mation(reinterpret_cast<char*>(msg->output));  

    strcpy(Information, mation.c_str());
    cvReleaseImage(&pSrcImage);
    return true;
}



猜你喜欢

转载自blog.csdn.net/wangduanqiugao/article/details/78696337