本望断在图像识别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;
}