data.dmtxencodedatamatrixx(X)后为什么X的值会改变

DataMatrix码识别技术研究_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
DataMatrix码识别技术研究
上传于||文档简介
&&二​维​条​码​本​身​具​有​高​容​量​、​高​密​度​、​纠​错​能​力​强​、​安​全​强​度​高​等​特​点​,​使​得​二​维​条​码​作​为​信​息​
​
​的​载​体​在​信​息​自​动​化​领​域​发​挥​着​越​来​越​重​要​的​作​用​。​该​文​提​出​了​一​种​基​于​手​机​应​用​平​台​的​D​M​码​
​
​识​别​方​案​,​并​对​图​像​识​别​过​程​进​行​了​优​化​。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢4227人阅读
2-D BarCode(2)
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,详细介绍见主页& 。 下面详细介绍Data Matrix在VS2010中编译过程: 1.&&从下载其稳定版本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:#pragma once
#include &targetver.h&
#include &stdio.h&
#include &../../src/datamatrix/libdmtx-0.7.4/dmtx.h&stdafx.cpp:#include &stdafx.h&
#ifdef _DEBUG
#pragma comment(lib, &../../../lib/dbg/x86_vc10/libdmtx[dbg_x86_vc10].lib&)
#pragma comment(lib, &../../../lib/rel/x86_vc10/libdmtx[rel_x86_vc10].lib&)
#endifbarcodetest.cpp:#include &stdafx.h&
#include &iostream&
#include &assert.h&
#include &string&
int main(int argc, char* argv[])
width, height, bytesPerP
string str = &中国_abc_DEF_123_@#$!&;
unsigned char
DmtxEncode
DmtxDecode
DmtxRegion
DmtxMessage
//fprintf(stdout, &input:
\&%s\&\n&, str);
cout&&&str : &&&str&&
/* 1) ENCODE a new Data Matrix barcode image (in memory only) */
enc = dmtxEncodeCreate();
assert(enc != NULL);
//dmtxEncodeDataMatrix(enc, strlen(str), str);
dmtxEncodeDataMatrix(enc, strlen(str.c_str()), (unsigned char*)str.c_str());
/* 2) COPY the new image data before releasing encoding memory */
width = dmtxImageGetProp(enc-&image, DmtxPropWidth);
height = dmtxImageGetProp(enc-&image, DmtxPropHeight);
bytesPerPixel = dmtxImageGetProp(enc-&image, DmtxPropBytesPerPixel);
pxl = (unsigned char *)malloc(width * height * bytesPerPixel);
assert(pxl != NULL);
memcpy(pxl, enc-&image-&pxl, width * height * bytesPerPixel);
dmtxEncodeDestroy(&enc);
/* 3) DECODE the Data Matrix barcode from the copied image */
img = dmtxImageCreate(pxl, width, height, DmtxPack24bppRGB);
assert(img != NULL);
dec = dmtxDecodeCreate(img, 1);
assert(dec != NULL);
reg = dmtxRegionFindNext(dec, NULL);
if(reg != NULL) {
msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);
if(msg != NULL) {
/*fputs(&output: \&&, stdout);
fwrite(msg-&output, sizeof(unsigned char), msg-&outputIdx, stdout);
fputs(&\&\n&, stdout);*/
dst = string(reinterpret_cast&const char*&(msg-&output));
dmtxMessageDestroy(&msg);
dmtxRegionDestroy(&reg);
cout&&&dst : &&&dst&&
dmtxDecodeDestroy(&dec);
dmtxImageDestroy(&img);
free(pxl);
cout&&&ok!&&&
} GitHub:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2229825次
积分:24708
积分:24708
排名:第207名
原创:327篇
转载:144篇
评论:1415条
(4)(11)(8)(7)(16)(14)(12)(10)(5)(8)(4)(1)(3)(7)(7)(3)(2)(8)(2)(2)(8)(9)(10)(4)(4)(4)(5)(4)(4)(6)(9)(12)(1)(4)(11)(4)(5)(4)(1)(1)(3)(3)(2)(1)(2)(1)(1)(2)(3)(4)(1)(2)(2)(4)(2)(4)(2)(6)(2)(5)(4)(6)(11)(9)(1)(13)(16)(11)(12)(17)(4)(8)(17)(14)(14)(17)(2)(1)(2)}

我要回帖

更多关于 dmtxencodedatamatrix 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信