精华内容
下载资源
问答
  • libdmtx

    千次阅读 2018-05-14 18:19:15
    4. 新建barcodetest控制台工程,对libdmtx库进行简单测试,相关文件代码如下(代码参考/libdmtx-0.7.4/test/simple-test/simple_test.c): stdafx.h: [cpp] view plain copy #pragma once     #include ...

    Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。Data-Matrix二维条码是一种矩阵式二维条码。

    Data Matrix符号由规则排列的深浅色正方形模块构成,每个正方形模块就是一个基本单元,每个基本单元又被编码为一比特的数据。数据区的四周是探测图形,用于条码符号定位和确定条码结构信息。探测图形的四周是空白区,用以将条码符号与背景分离。

    探测图形是一个模块的宽度,是数据区的边界,其中全部由深色模块组成的两条邻边构成了一个“L”形实线边缘,“L”对面由交替的深浅模块组成的两条邻边又构成了虚线边缘。探测图形主要用于限定符号的单元结构,也可用于确定符号的物理尺寸,以及解决符号定位和失真等问题。

    数据区是由多个正方形深浅模块所组成的正方形区域,信息储存方式是深浅模块的不同排列组合.以二进制码方式来编码数据,因此计算机可直接读取。深色模块代表“1”,浅色模块代表“0”,再利用成串的特定排列的深浅模块来描述码字信息,再排列成一个矩阵式符号,最终形成Data Matrix条码。

    因此,任意Data Matrix符号可以由四个部分构成:探测图形中“L”形的两条实线边缘、探测图形中“L”形对面的两条虚线边缘、被探测图形包围的数据区、条码符号四周的一个模块宽度的空白区。

    Data Matrix条码编码是将物品信息转化成为数据码字流,用二维条码符号来表示实现。允许输入数据信息多样,可以是数字和字母,可以是常规的文字、字符信息,还可以是多媒体信息,如声音、图片、指纹等。

    Data Matrix分为ECC 000-140和ECC 200两个大类,ECC 000-140具有四个等级的卷积纠错功能,ECC 200则通过Reed—Solomon纠错算法计算纠错码,根据符号的不同尺寸得到不同的纠错码。两类符号的外形区别在于,ECC 000-140符号的右上角为深色模块(仅为奇数),尺寸从9*9至49*49。ECC 200符号的右上角为浅色模块(仅为偶数),尺寸从10*10至144*144,若为长方形则从8*18至16*48。ECC 200应用较多。

    Data Matrix编码包括三个部分:一是将数据信息流通过最优的编码规则转换成数据码字;二是根据Reed-Solomon算法以及响应的纠错要求,在数据码字的基础上生成纠错码字,数据码字加上纠错码字及可能需要的若干填充字符,构成编码后的码字流;三是将按照标准模板将单元模块放置到矩阵中,并加入探测图形,生成Data Matrix二维矩阵码符号。

    Data Matrix二维条码图像的识别主要包括图像预处理、条码定位、采样解码。

    Data Matrix条码图像预处理:首先对采集到的彩色图像灰度化;然后对灰度图像进行滤波去噪;选取适当的阈值进行图像二值化;最后进行边缘提取。

    条码定位:区域初定位、边缘检测、旋转校正、精确提取、条码分割(网格)。

    Data Matrix条码解码识别:根据采样网格,将深浅模块转换为“1”、“0”矩阵;去除探测图形,提取出数据区,并得到条码尺寸和版本信息;调用模块放置矩阵恢复正确顺序的码字流;再确定数据码字和纠错码字,并进行条码数据的检错纠错;最终恢复原始数据,正确解码输出。

    Data Matrix核心库它的license是BSD,详细介绍见主页http://www.libdmtx.org/  。

    下面详细介绍Data Matrix在VS2010中编译过程:

    1.  从http://sourceforge.net/projects/libdmtx/下载其稳定版本libdmtx-0.7.4;

    2.  新建一个libdmtx静态库工程,将/libdmtx-0.7.4目录下相应的.h、.c文件加入到此工程中;

    3.  对源代码进行调整:(1)、将dmtx.h和dmtxstatic.h两个头文件分别包含到每个.c文件中;(2)、对于错误C2129,处理办法是将声明和实现中的“static”关键字都去掉;(3)、将float.h、stdio.h、limits.h、assert.h、math.h文件加入到dmtx.h中;(4)、将CHKERR、CHKSCHEME、CHKSIZE、CALLBACK_MATRIX等的定义从dmtxencodescheme.c中拷贝到dmtx.h中;(5)、注释掉dmtx.c文件中包含的.c文件;(6)、将文件中的snprintf函数用sprintf_s函数替代;

    4. 新建barcodetest控制台工程,对libdmtx库进行简单测试,相关文件代码如下(代码参考/libdmtx-0.7.4/test/simple-test/simple_test.c):

    stdafx.h:

    1. #pragma once  
    2.   
    3. #include "targetver.h"  
    4.   
    5. #include <stdio.h>  
    6.   
    7. #include "../../src/datamatrix/libdmtx-0.7.4/dmtx.h"  

    stdafx.cpp:

    1. #include "stdafx.h"  
    2.   
    3. #ifdef _DEBUG  
    4.     #pragma comment(lib, "../../../lib/dbg/x86_vc10/libdmtx[dbg_x86_vc10].lib")  
    5. #else  
    6.     #pragma comment(lib, "../../../lib/rel/x86_vc10/libdmtx[rel_x86_vc10].lib")  
    7. #endif  

    barcodetest.cpp:

    1. #include "stdafx.h"  
    2. #include <iostream>  
    3. #include <assert.h>  
    4. #include <string>  
    5.   
    6. using namespace std;  
    7.   
    8. int main(int argc, char* argv[])  
    9. {  
    10.     size_t          width, height, bytesPerPixel;  
    11.     string str = "中国_abc_DEF_123_@#$!";  
    12.     string dst;  
    13.     unsigned char  *pxl;  
    14.     DmtxEncode     *enc;  
    15.     DmtxImage      *img;  
    16.     DmtxDecode     *dec;  
    17.     DmtxRegion     *reg;  
    18.     DmtxMessage    *msg;  
    19.   
    20.     //fprintf(stdout, "input:  \"%s\"\n", str);  
    21.     cout<<"str : "<<str<<endl;  
    22.   
    23.     /* 1) ENCODE a new Data Matrix barcode image (in memory only) */  
    24.     enc = dmtxEncodeCreate();  
    25.     assert(enc != NULL);  
    26.     //dmtxEncodeDataMatrix(enc, strlen(str), str);  
    27.     dmtxEncodeDataMatrix(enc, strlen(str.c_str()), (unsigned char*)str.c_str());  
    28.   
    29.     /* 2) COPY the new image data before releasing encoding memory */  
    30.     width = dmtxImageGetProp(enc->image, DmtxPropWidth);  
    31.     height = dmtxImageGetProp(enc->image, DmtxPropHeight);  
    32.     bytesPerPixel = dmtxImageGetProp(enc->image, DmtxPropBytesPerPixel);  
    33.   
    34.     pxl = (unsigned char *)malloc(width * height * bytesPerPixel);  
    35.     assert(pxl != NULL);  
    36.     memcpy(pxl, enc->image->pxl, width * height * bytesPerPixel);  
    37.   
    38.     dmtxEncodeDestroy(&enc);  
    39.   
    40.     /* 3) DECODE the Data Matrix barcode from the copied image */  
    41.     img = dmtxImageCreate(pxl, width, height, DmtxPack24bppRGB);  
    42.     assert(img != NULL);  
    43.   
    44.     dec = dmtxDecodeCreate(img, 1);  
    45.     assert(dec != NULL);  
    46.   
    47.     reg = dmtxRegionFindNext(dec, NULL);  
    48.     if(reg != NULL) {  
    49.         msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);  
    50.         if(msg != NULL) {  
    51.             /*fputs("output: \"", stdout); 
    52.             fwrite(msg->output, sizeof(unsigned char), msg->outputIdx, stdout); 
    53.             fputs("\"\n", stdout);*/  
    54.             dst = string(reinterpret_cast<const char*>(msg->output));  
    55.             dmtxMessageDestroy(&msg);  
    56.         }  
    57.         dmtxRegionDestroy(&reg);  
    58.     }  
    59.   
    60.     cout<<"dst : "<<dst<<endl;  
    61.   
    62.     dmtxDecodeDestroy(&dec);  
    63.     dmtxImageDestroy(&img);  
    64.     free(pxl);  
    65.   
    66.     cout<<"ok!"<<endl;  
    67.     return 0;  
    68. }  

    GitHub https://github.com/fengbingchun/BarCode_Test
    展开全文
  • libdmtx.rar

    2021-08-09 09:45:09
    DM条码识别 libdmtx 0.7.2.zip libdmtx-0.7.4.zip libdmtx-0.7.5.rar
  • libdmtx文档

    2012-11-07 20:13:46
    libdmtx文档,包括libdmtx0a,libdmtx-dev,libdmtx-utils
  • 包内包含多种语言的实现,python,java,php等,libdmtx库 pydmtx Libdmtx php_dmtx
  • Libdmtx的源程序

    2018-10-19 10:41:33
    关于Libdmtx的源程序,可生成、解码DataMatrix二维码。
  • libdmtx使用总结

    千次阅读 2019-10-07 21:35:55
    本文档仅记录自己使用libdmtx这个库过程中的总结。 1. 基础使用 DmtxMessage* msg; DmtxRegion* reg; if (!src.data) cout << "Load image failed!" << endl; DmtxImage* img; img = ...

    本文档仅记录自己使用libdmtx这个库过程中的总结。

    1. 基础使用

    DmtxMessage* msg;
    DmtxRegion* reg;
    if (!src.data)
        cout << "Load image failed!" << endl;
    DmtxImage* img;
    img = dmtxImageCreate(src.data, src.cols, src.rows, DmtxPack8bppK);
    DmtxDecode* dec = dmtxDecodeCreate(img, 1);
    reg = dmtxRegionFindNext(dec, NULL);
    if (reg != NULL) {
        msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);
        if (msg != NULL) {
            cout << msg->output << endl;
            dmtxMessageDestroy(&msg);
        }
        else
            cout<<"Not valid data type."<<endl;
        dmtxRegionDestroy(&reg);
    }
    else
        cout << "Cannot find codes..." << endl;
    dmtxDecodeDestroy(&dec);
    dmtxImageDestroy(&img);
    

    注明:首先创建dmtx类型的图像,再创建decode的方式(缩写dec),在根据dec方式寻找区域region(reg),如果能够找到区域,再在区域内根据dec方式进行解码。

    2. 设置属性

    在某些情况下,dm码一些性质是已知的,可以通过设置避免误判,同时提高检测速度:
    在dmtxdecod.c文件源码中,发现:
    dmtxDecodeCreate时,默认进行了如下设定:

    dec->fnc1 = DmtxUndefined;
    dec->edgeMin = DmtxUndefined;
    dec->edgeMax = DmtxUndefined;
    dec->scanGap = 1;
    dec->squareDevn = cos(50 * (M_PI/180));
    dec->sizeIdxExpected = DmtxSymbolShapeAuto;
    dec->edgeThresh = 10;
    dec->xMin = 0;
    dec->xMax = width - 1;
    dec->yMin = 0;
    dec->yMax = height - 1;
    dec->scale = scale;
    
    dec->cache = (unsigned char *)calloc(width * height, sizeof(unsigned char));
    if(dec->cache == NULL) {
       free(dec);
       return NULL;
    }
    
    dec->image = img;
    dec->grid = InitScanGrid(dec);
    

    可以发现,将edge最大最小,扫描间隔,dm码尺寸,起止位置等均设置为了一些默认值。
    设置之后,设定了scan时网格的初始化dec->grid方式。

    可以通过设置相关属性。利用:dmtxDecodeSetProp函数。函数原型如下:

    extern DmtxPassFail
    dmtxDecodeSetProp(DmtxDecode *dec, int prop, int value)
    {
       switch(prop) {
          case DmtxPropEdgeMin:
             dec->edgeMin = value;
             break;
          case DmtxPropEdgeMax:
             dec->edgeMax = value;
             break;
          case DmtxPropScanGap:
             dec->scanGap = value; /* XXX Should this be scaled? */
             break;
          case DmtxPropFnc1:
             dec->fnc1 = value;
             break;
          case DmtxPropSquareDevn:
             dec->squareDevn = cos(value * (M_PI/180.0));
             break;
          case DmtxPropSymbolSize:
             dec->sizeIdxExpected = value;
             break;
          case DmtxPropEdgeThresh:
             dec->edgeThresh = value;
             break;
          /* Min and Max values arrive unscaled */
          case DmtxPropXmin:
             dec->xMin = value / dec->scale;
             break;
          case DmtxPropXmax:
             dec->xMax = value / dec->scale;
             break;
          case DmtxPropYmin:
             dec->yMin = value / dec->scale;
             break;
          case DmtxPropYmax:
             dec->yMax = value / dec->scale;
             break;
          default:
             break;
       }
    
       if(dec->squareDevn <= 0.0 || dec->squareDevn >= 1.0)
          return DmtxFail;
    
       if(dec->scanGap < 1)
          return DmtxFail;
    
       if(dec->edgeThresh < 1 || dec->edgeThresh > 100)
          return DmtxFail;
    
       /* Reinitialize scangrid in case any inputs changed */
       dec->grid = InitScanGrid(dec);
    
       return DmtxPass;
    }
    

    可以看出,当指定某一属性时,将相关编码器的属性进行了修改,并重新init网格。
    一些属性推测:

    dec->edgeMin:最小间隔,指一个dm码尺寸,而不是一个小像素的大小
    dec->squareDevn:(推测)为倾斜程度
    dec->sizeIdxExpected :
    	dm码尺寸,设定后在后续扫描时会比较当前尺寸与更大一号的尺寸哪个更为合适,
    	在解码时会按照更合适的尺寸进行解码;若未设置,则全部尺寸过一遍。
    

    所以针对这些情况,可以在初始化之后进行如下设置:

    DmtxDecode* dec = dmtxDecodeCreate(img, 1);
    
    dmtxDecodeSetProp(dec, DmtxPropEdgeMin, 120);
    dmtxDecodeSetProp(dec, DmtxPropEdgeMax, 150);
    dmtxDecodeSetProp(dec, DmtxPropSquareDevn, 5);
    dmtxDecodeSetProp(dec, DmtxPropSymbolSize, DmtxSymbol12x12);
    
    reg = dmtxRegionFindNext(dec, NULL);
    
    展开全文
  • libdmtx-master_0.7.5.rar

    2019-12-17 14:14:48
    libdmtx 0.7.5源码,自己可以编译成lib库,libdmtx是一个专门用来解 datamatrix码制的开源代码库。
  • 真64位libdmtx库的lib和dll文件,不吝啬1积分的话请下载支持一下,实在没有积分也可以到这个文章链接找到百度云下载。https://blog.csdn.net/qq_34965116/article/details/84202703
  • 目录step1 libdmtx是一个对DM码进行编码解码的开源库 step1

    libdmtx是一个对DM(DataMatrix)码进行编码和解码的开源库。
    有关DM码的介绍可参考:https://www.cnblogs.com/gcczhongduan/p/5380337.html

    step1 运行环境

    1、Windows 10 64位

    2、Visual Studio 2015 Professional

    3、OpenCV 3.4.3

    4、libdmtx 0.7.4

    step2 编译生成库文件

    1、在该链接https://sourceforge.net/p/libdmtx/libdmtx/ci/v0.7.4/tree/将0.7.4和0.7.2两个版本的库下载至本机,并解压。
    在这里插入图片描述
    在这里插入图片描述

    2、将0.7.2文件夹中的project和wrapper文件夹拷到0.7.4的文件夹中。
    在这里插入图片描述

    3、打开libdmtx-libdmtx-0.7.4\project\visualc9路径下的libdmtx.sln解决方案文件,选中倒数第二个选项。
    在这里插入图片描述

    4、选中解决方案libdmtx,右键重新加载项目,确定单向升级。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5、默认生成的是32位的lib和dll,如果要生成64位的,需要配置管理器。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    6、配置好管理器后,右键解决方案,生成解决方案,不报错即可生成对应的lib和dll文件。
    在这里插入图片描述
    在这里插入图片描述

    step3 配置库文件

    1、将libdmtx-libdmtx-0.7.4\project\visualc9\x64\Debug下的libdmtx.lib和libdmtx.dll文件,以及0.7.4文件夹下的dmtx.h文件一同拷出备用。
    在这里插入图片描述

    2、在VS2015中新建空项目,在属性管理器->链接器->输入->附加依赖项中将libdmtx.lib添加进去。
    在这里插入图片描述

    3、复制以下代码,选择一张DM码的图片放入空项目路径中,运行解码。

    #include <iostream>
    #include <opencv2\opencv.hpp>
    #include "dmtx.h"
    
    int main()
    {
    	DmtxMessage *msg;
    	DmtxRegion *reg;
    	cv::Mat src = 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码区域
    	{
    		msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);  //解析DM码
    		if (msg != NULL)  //如果DM码解析成功
    		{
    			std::cout << "DataMatrix Decode Result: " << msg->output << std::endl;
    			dmtxMessageDestroy(&msg);
    		}
    		dmtxRegionDestroy(&reg);
    	}
    	dmtxDecodeDestroy(&dec);
    	dmtxImageDestroy(&img);
    	cv::imshow("Test", image);
    	cv::waitKey();
    	return 0;
    }
    

    step4 测试

    实际测试中,选择使用摄像头捕获用代码生成的DM码,解码结果为本站博客网址。
    在这里插入图片描述

    有关条码定位:
    代码中条码区域reg指针对象可以获取条码的位置信息,但是测试发现定位效果一般。
    (测试图来自网络)
    在这里插入图片描述

    参考文章:
    https://blog.csdn.net/qq_34965116/article/details/84202703
    https://blog.csdn.net/tfb760/article/details/91312804
    http://libdmtx.wikidot.com/libdmtx-on-windows-using-visual-studio
    https://blog.csdn.net/wangduanqiugao/article/details/78696337
    https://www.cnblogs.com/gcczhongduan/p/5380337.html
    https://blog.csdn.net/p154613730/article/details/83999288
    https://blog.csdn.net/fengbingchun/article/details/44279967
    https://blog.csdn.net/fengbingchun/article/details/53889293(先生成二维码再解码)

    Juliet 于 2019.9

    展开全文
  • raspberry+opencv+libdmtx

    2019-05-27 17:52:32
    libdmtx导入4. 存在的问题 本文记录了自己在raspberry pi中安装opencv与dmtx库过程。仅做个人记录,或许还可以帮到其他朋友。如需转载,请注明本文地址。 0. 参考内容 opencv在raspberry下安装:...


    本文记录了自己在raspberry pi中安装opencv与dmtx库过程。仅做个人记录,或许还可以帮到其他朋友。如需转载,请注明本文地址。

    0. 参考内容

    1. opencv在raspberry下安装:https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/
    2. libdmtx下载:https://github.com/dmtx/libdmtx
    3. cmake入门: https://pan.baidu.com/s/1UXO4dy-TSkTHOmvV1McQtg 提取码: 2dd6

    1. 树莓派安装opencv

    # 清理空间。opencv安装基本占满了空间。
    sudo apt-get -y purge wolfram-engine
    sudo apt-get -y purge libreoffice*
    sudo apt-get -y clean
    sudo apt-get -y autoremove
    
    cvVersion="master"
    
    # Clean build directories
    rm -rf opencv/build
    rm -rf opencv_contrib/build
    
    # Create directory for installation
    mkdir installation
    mkdir installation/OpenCV-"$cvVersion"
    cwd=$(pwd)
    
    # Step 1: Update Packages
    sudo apt -y update
    sudo apt -y upgrade
    
    #Step 2: Install OS Libraries
    sudo apt-get -y remove x264 libx264-dev
    
    ## Install dependencies
    sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm
    sudo apt-get -y install git gfortran
    sudo apt-get -y install libjpeg8-dev libjasper-dev libpng12-dev
    sudo apt-get -y install libtiff5-dev
    sudo apt-get -y install libtiff-dev
    sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
    sudo apt-get -y install libxine2-dev libv4l-dev
    cd /usr/include/linux
    sudo ln -s -f ../libv4l1-videodev.h videodev.h
    cd $cwd
    
    sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
    sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default
    sudo apt-get -y install libatlas-base-dev
    sudo apt-get -y install libmp3lame-dev libtheora-dev
    sudo apt-get -y install libvorbis-dev libxvidcore-dev libx264-dev
    sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev
    sudo apt-get -y install libavresample-dev
    sudo apt-get -y install x264 v4l-utils
    
    # Optional dependencies
    sudo apt-get -y install libprotobuf-dev protobuf-compiler
    sudo apt-get -y install libgoogle-glog-dev libgflags-dev
    sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
    
    # Step 3. 安装python相关环境,不装也行吧。保险起见装上其中一部分,肯定不需要虚拟环境
    sudo apt-get -y install python3-dev python3-pip
    sudo -H pip3 install -U pip numpy
    sudo apt-get -y install python3-testresources
    
    
    # Step 4: Download opencv and opencv_contrib
    git clone https://github.com/opencv/opencv.git
    cd opencv
    git checkout $cvVersion
    cd ..
    
    git clone https://github.com/opencv/opencv_contrib.git
    cd opencv_contrib
    git checkout $cvVersion
    cd ..
    
    #Step 5: Compile and install OpenCV with contrib modules
    cd opencv
    mkdir build
    cd build
    # 注意这一步cmake需要好久才能通过,而且会卡在某个安装好久,慢慢等着就好。
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
                -D CMAKE_INSTALL_PREFIX=$cwd/installation/OpenCV-"$cvVersion" \
                -D INSTALL_C_EXAMPLES=ON \
                -D INSTALL_PYTHON_EXAMPLES=ON \
                -D WITH_TBB=ON \
                -D WITH_V4L=ON \
                -D OPENCV_PYTHON3_INSTALL_PATH=$cwd/OpenCV-$cvVersion-py3/lib/python3.5/site-packages \
            -D WITH_QT=ON \
            -D WITH_OPENGL=ON \
            -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
            -D BUILD_EXAMPLES=ON .
    # 然后就是漫长的编译,用时约4-6小时,而且中途可能会断掉。继续开始就好。
    # 1.需要注意/dev/root是不是快满了。基本编译过程中是满的
    # 2.在100%时编译Canny_Detector_Demo会卡好久,慢慢等着。
    # 3.之前需要对卡进行扩展,避免只是用4G部分
    # 4.可以通过 $ df -h 查看空间使用情况; 使用 du --max-depth=1 查找当前路径大文件
    
    # Step 6: Reset swap file
    # 注意需要修改swap空间大小,否则会在编译100%时卡死。
    sudo vim /etc/dphys-swapfile
    CONF_SWAPSIZE=100 改成 1024
    # 重启交换服务
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    
    # Step 7:开始编译
    make -j$(nproc)		# 编译线程。建议几核的就使用几线程。在我的pi等价于 make -j4
    make install
    
    # Finally, we also need to add a simple statement to make sure that VideoCapture(0) works on our Raspberry Pi.
    echo "sudo modprobe bcm2835-v4l2" >> ~/.profile
    

    2 CMakeLists.txt写法

    mkdir piOpencv
    cd piOpencv
    mkdir build
    mkdir src 	# 存储源文件
    mkdir libs	# 存储库
    

    创建CMakeLists.txt

    cmake_minimum_required(VERSION 3.1)
    PROJECT(piShowImg)
    ADD_SUBDIRECTORY(src bin)
    

    将opencv头文件考到工程中!否则找头文件找的非常混乱。

    cd /usr/include/opencv2			# 头文件路径
    sudo tar -cvf include.tar *		# 文件打包
    

    然后拷贝到工程路径中src的include下。
    编辑opencv.hpp头文件,将里面不需要的头文件删掉。实际使用时 ml.hpp, photo.hpp等由于路径问题找不到,删掉就好,反正也用不到。

    将相应库文件也拷贝过来。这个路径在:

    cd /usr/lib/arm-linux-gnueabihf
    

    这个路径是怎么发现的呢?其实之前通过了cmake编译,然后使用 ldd piOpencv指令查看连接关系,发现连接到了这里。于是拷过去(到libs)。(只拷贝 opencv_core opencv_highgui opencv_imgproc即可)。

    注!
    如果将~/installation/下的头文件和库考进去,会出现问题,cmake和make都可以通过,但是运行时imshow函数会崩掉,个人感觉是库版本和头文件对应关系。所以不要用这边的库。所以用上面那个路径的。

    之后编辑src路径下的CMakeLists.txt。注意这时候还不应该包含dmtx.a。

    # ADD this line should be before target_link_libraries line...
    ADD_EXECUTABLE(piShowImg main.cpp)
    
    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
    # this line is not necessary. WHY?
    # link_directories(${CMAKE_CURRENT_SOURCE_DIR}/libs)
    
    # do not need full librariy names.
    target_link_libraries(piShowImg opencv_core opencv_highgui opencv_imgproc dmtx.a)
    # target_link_libraries(piShowImg libopencv_core.so libopencv_highgui.so libopencv_imgproc.so dmtx)
    

    然后可以使用基本的opencv操作。

    3. libdmtx导入

    通过https://github.com/dmtx/libdmtx下载libdmtx-master.zip并解压,进入目录安装里面的"README"进行安装即可。简单记录如下:

    1. 安装automake, libtool, pkg-config三个依赖项。直接 “$sudo apt-get install xxx” 即可。
    2. 执行 ./autogen.sh 生成./config文件
    3. $./config
    4. $make
    5. $sudo make install

    之后将libdmtx-master中的 libdmtx.a libdmtx.so libdmtx.so.xx.xx等打包,同样放到libs文件中。
    在CMakeLlists里面加上 “dmtx.a” 链接库。

    4. 存在的问题

    1. 怀疑CMakeLists里面的库路径并没有加进去,因为直接导入dmtx时找不到,还是又走了一遍安装
    2. 不知道opencv安装后产生的installation文件有什么用。也没有注意最开始安装前在 /usr/lib/arm-linux-gnueabihf 目录下是否有opencv的库,以及/usr/include中是否有opencv的头文件。

    总结:乱七八糟的,算是能用了吧。

    展开全文
  • Windows+VS2015+libdmtx学习总结

    千次阅读 2019-06-08 11:06:31
    libdmtx是一个专门用来解 datamatrix码制的开源代码库。 代码下载:https://sourceforge.net/p/libdmtx/libdmtx/ci/v0.7.4/tree/ wiki:http://libdmtx.wikidot.com/general-instructions 使用介绍:...
  • Qt+opencv+libdmtx+海康相机 QR码与DM码识别软件,采用海康黑白工业相机采集图像,opencv+libdmtx识别二维码,Qt编写界面
  • 包含libdmtx0.7.2和0.7.4在x86和x64环境下的lib和dll,由VS2013编译源码生成
  • VS2017+OpenCV3.4.0+libdmtx0.7.4安装配置

    千次阅读 2018-11-18 18:54:57
    OpenCV 3.4.0在vs2017下的配置 参见文章opencv下载安装与VS2017开发环境配置,实测可行,这里不再赘述。 libdmtx 0.7.4配置 libdmtx是一个用于编解码datamatix...首先libdmtx可以在这个网站下载libdmtx下载链...
  • libdmtx结合OpenCV识别DataMatrix二维码

    千次阅读 2019-10-13 17:56:11
    Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。 Datamatrix是一种矩阵式二维条码,其发展的构想是希望在较小的条码标签上...本文介绍的是使用libdmtx结合Op...
  • 利用Opencv和libdmtx识别 datamatrx ECC200二维码。可以识别旋转的非标准二维码。文件中包含了 libdmtx必需的链接库和头文件。
  • libdmtx库的配置与OpenCV4.5的安装 这里写目录标题libdmtx库的配置与OpenCV4.5的安装1.Libdmtx库的配置1.首先就是先去下载一个libdmtx库2.开始配置2. OpenCV4.5的安装(C++)1.安装依赖项和cmake2.下载OpenCV4.5...
  • 开源二维码识别库libdmtx动态链接库文件,VS2015平台下编译,Debug 64位
  • DataMatrix编码,基于libdmtx-0.7.4实现

    千次阅读 2018-11-12 22:28:18
    以前二维码很火的时候(当然现在也很火),特别是QR码在扫码支付以及产品追溯领域大放异彩,那时特别关注了一下二维码实现...下载其稳定版本0.7.4,libdmtx是专门用来处理DataMatrix码的,有源码,但参考的例程比较...
  • libdmtx下载 https://github.com/dmtx/libdmtx libdmtx安装 $ ./configure $ make $ sudo make install 运行./configure如果报"./configure: No such file or directory",错误,先运行 ./autogen.sh再运行./...
  • datamatrx解码,源码,vs编译的libdmtx的32位,64位lib,dll文件。包含0.7.2以及0.7.4两个版本。
  • 本文总结在ubuntu16.04版本下,使用vscode编译器,编写c++代码,利用opencv库和libdmtx库,进行datamatrix码识别的方法
  • 在VS中编译libdmtx库的源码

    千次阅读 2014-03-28 10:27:36
    libdmtx库最新版本是0.7.4,是2011年六月份发布的,至今没有更新,文档也跟不上。  今天试了一下在VS里编译libdmtx的源码,简单记录下过程。    尝试了这个网页上...
  • DataMatrix编码 关于libdmtx的使用

    千次阅读 2015-06-25 17:00:46
    libdmtx使用方法在其官网有明确的说明 官网地址http://www.libdmtx.org/下的文档目录就有。 一开始的时候,我是搜索DataMatrix的编码方法,然后来调用的。后来找到了ISO/IEC 16022规范,但是出乎意料的是,我使用...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 184
精华内容 73
关键字:

libdmtx