libdmtx开源库是一个专门用来读写 datamatrx 二维码的库。
相关资料文档如下
Documentation wiki: libdmtx.wikidot.com
GitHub page: github.com/dmtx/libdmtx
OhLoh.net page: www.ohloh.net/projects/libdmtx
Open mailing list: libdmtx-open_discussion@lists.sourceforge.net
下载和编译libdmtx库,因为使用QT5,直接用MinGW编译器,那QT5+OpenCV+libdmtx都用
相同的编译器编译。
1、libdmtx编译
下载libdmtx后,源码有说明MinGW编译,不过模拟linux下的太麻烦了;因为我喜欢简洁的方式,
我就直接用QT5创建了一个静态库工程 libdmtx,然后把头文件和c文件拷贝到工程里,或者pro里添加也可以;
编译完成后,相应的目录下会生成 libdmtxlib.a
2、下载MinGW编译的OpenCV,下载已经编译好的OpenCV,选择相应的版本,版本不对可能会有问题;
我这里下载的是 OpenCV-MinGW-Build-OpenCV-4.1.0-x64,开始下的最新版本一直有问题,没时间查了;
https://github.com/huihut/OpenCV-MinGW-Build
解压到相应的目录即可备用。
3、然后新建一个QT5应用程序工程,用来使用这个libdmtxlib.a静态库
这里直接使用相机的例程,可以用相机读取图像,相当于扫描一样,得到二维码图像,然后用这个库解码。
实现代码如下
#include "Dmtxlib.h"
void MainWindow::on_BtnCvDmtx_released()
{
Mat src = imread("dmtx.jpg");
if (!src.data){
//cout << "Load image failed!" << endl;
return;
}
Dmtxlib _Dmtxlib;
DmtxMessage *msg;
DmtxRegion *reg;
DmtxImage *img;
img = _Dmtxlib.dmtxImageCreate_(src.data, src.cols, src.rows, DmtxPack24bppRGB);
DmtxDecode *dec = _Dmtxlib.dmtxDecodeCreate_(img, 1);
reg = _Dmtxlib.dmtxRegionFindNext_(dec, NULL);
if (reg != NULL) {
msg = _Dmtxlib.dmtxDecodeMatrixRegion_(dec, reg, DmtxUndefined);
if (msg != NULL) {
cout << msg->output << endl;
ui->labelResult->setText( QString::fromLocal8Bit((char*)msg->output));
_Dmtxlib.dmtxMessageDestroy_(&msg);
}
_Dmtxlib.dmtxRegionDestroy_(®);
}
_Dmtxlib.dmtxDecodeDestroy_(&dec);
_Dmtxlib.dmtxImageDestroy_(&img);
}
二维码图片
运行效果
(结束)