熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A
標(biāo)準(zhǔn)二維碼的識別
Libdmtx 是一個專門用于識別 datamatrix 二維碼的庫。搭配Opencv可以較為準(zhǔn)確識別工業(yè)二維碼 ECC200(關(guān)于二維碼的編碼種類以及 ECC200)。接下來是 libdmtx 在VS2015 中的配置,以及簡單的測試用例。
1、Windows 10 64位
2、Visual Studio 2015Professional
3、OpenCV 3.4.3
4、libdmtx 0.7.4
1、在該鏈接https://sourceforge.net/p/libdmtx/libdmtx/ci/v0.7.4/tree/將0.7.4和0.7.2兩個版本的庫下載至本機(jī),并解壓。
2、將0.7.2文件夾中的project和wrapper文件夾拷到0.7.4的文件夾中。
3、打開libdmtx-libdmtx-0.7.4\project\visualc9路徑下的libdmtx.sln解決方案文件,選中倒數(shù)第二個選項。
4、選中解決方案libdmtx,右鍵重新加載項目,確定單向升級。
5、默認(rèn)生成的是32位的lib和dll,如果要生成64位的,需要配置管理器。
6、配置好管理器后,右鍵解決方案,生成解決方案,不報錯即可生成對應(yīng)的lib和dll文件。
1、將libdmtx-libdmtx-0.7.4\project\visualc9\x64\Debug下的libdmtx.lib和libdmtx.dll文件,以及0.7.4文件夾下的dmtx.h文件一同拷出備用。
2、在VS2015中新建空項目,在屬性管理器->鏈接器->輸入->附加依賴項中將libdmtx.lib添加進(jìn)去。
3、復(fù)制以下代碼,選擇一張DM碼的圖片放入空項目路徑中,運(yùn)行解碼。
#include <iostream>
#include <opencv2\opencv.hpp>
#include "dmtx.h"
int main()
{
DmtxMessage*msg;
DmtxRegion*reg;
cv::Matsrc = cv::imread("DM_code.jpg");
if(!src.data)
{
std::cout<< "cannot load image!" << std::endl;
}
DmtxImage*img;
img= dmtxImageCreate(src.data, src.cols, src.rows, DmtxPack24bppRGB);
DmtxDecode*dec = dmtxDecodeCreate(img, 1);
reg= dmtxRegionFindNext(dec, NULL);
if(reg != NULL) //如果檢測到存在DM碼區(qū)域
{
msg= dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined); //解析DM碼
if(msg != NULL) //如果DM碼解析成功
{
std::cout<< "DataMatrix Decode Result: " << msg->output<< std::endl;
dmtxMessageDestroy(&msg);
}
dmtxRegionDestroy(®);
}
dmtxDecodeDestroy(&dec);
dmtxImageDestroy(&img);
cv::imshow("Test",image);
cv::waitKey();
return0;
}
實際測試中,選擇使用攝像頭捕獲用代碼生成的DM碼,解碼結(jié)果為CSDN博客網(wǎng)址。
有關(guān)條碼定位:
代碼中條碼區(qū)域reg指針對象可以獲取條碼的位置信息,但是測試發(fā)現(xiàn)定位效果一般。
(測試圖來自網(wǎng)絡(luò))
熱線電話:0755-23712116
郵箱:contact@shuangyi-tech.com
地址:深圳市寶安區(qū)沙井街道后亭茅洲山工業(yè)園工業(yè)大廈全至科技創(chuàng)新園科創(chuàng)大廈2層2A