QT5+OpenCV+libdmtx识别datamatrx ECC200二维码

发布于:2024-11-29 ⋅ 阅读:(29) ⋅ 点赞:(0)

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_(&reg);
    }
    _Dmtxlib.dmtxDecodeDestroy_(&dec);
    _Dmtxlib.dmtxImageDestroy_(&img);
}

二维码图片

运行效果

(结束)