matlab一维条形码码字识别程序

matlab一维条形码码字识别程序
matlab一维条形码码字识别程序

close all

I = imread('E:\txm.jpg');

J= rgb2gray(I);

figure(1)

imshow(J);

title('灰度化图像 ');

[e1,e2]=size(J);

Im=imcrop(J,[e2/2-200,e1/2-200,400,400]); figure(2)

subplot(1,2,1),imshow(Im)

title('中心区域 ');

subplot(1,2,2),imhist(Im)

title('中心区域直方图');

[xa,ya]=size(Im);

b=double(Im);

zd=double(max(Im)) ;

zx=double(min(Im)) ;

T=double((zd+zx))/2;

count=double(0);

while 1

count=count+1;

S0=0.0; n0=0.0;

S1=0.0; n1=0.0;

for i=1:xa

for j=1:ya

if double(Im(i,j))>=T

S1=S1+double(Im(i,j));

n1=n1+1;

else

S0=S0+double(Im(i,j));

n0=n0+1;

end

end

end

T0=S0/n0;

T1=S1/n1;

if abs(T-((T0+T1)/2))<0.1

break;

else

T=(T0+T1)/2;

end

end

count

T

K=find(J

J(K)=0;

K=find(J>=T);

J(K)=255;

figure(3)

imshow(J)

title(' 图像二值化 ');

B=medfilt2(J,[5,1]);

figure(4)

imshow(B)

title('中值滤波后图像');

[y0,x0]=size(B);

BW = edge(B,'log');

figure(5);imshow(BW);title('边缘检测图像')

%function code = barcode(pic) %条形码识别

check_left = [13,25,19,61,35,49,47,59,55,11;... %左边数据编码,奇39,51,27,33,29,57, 5,17, 9,23]; %左边数据编码,偶

check_right = [114,102,108,66,92,78,80,68,72,116]; %右边数据编码first_num = [31,20,18,17,12,6,3,10,9,5];%第一位数据编码

bar = imread('E:\txm.jpg');%读输入条形码图片

bar_Gray = rgb2gray(bar);%将RGB图片转换灰度图

[a_hist x] = imhist(bar_Gray);

hist_max = [];

if a_hist(1)>a_hist(2)

hist_max = [hist_max 1];

end

x = max(x);

for i=2:x

if a_hist(i)>a_hist(i-1) && a_hist(i)>a_hist(i+1)

hist_max = [hist_max i];

end

end

if a_hist(x)

hist_max = [hist_max x+1];

end

[m,n] = size(hist_max);

k = 0;

max_1 = 0;

max_2 = 0;

for i=1:n

if k

k = a_hist(hist_max(i));

max_1 = hist_max(i);

end

end

temp = a_hist(max_1);

a_hist(max_1) = 0;

k = 0;

for i=1:n

if k

k = a_hist(hist_max(i));

max_2 = hist_max(i);

end

end

a_hist(max_1) = temp;

if max_1>max_2

k = max_1;

max_1 = max_2;

max_2 = k;

end

T = max_1;

k = a_hist(max_1);

for i=max_1:max_2

if k>a_hist(i)

k = a_hist(i);

T = i;

end

end

[m,n] = size(bar_Gray); %求灰度图的大小for i=1:m %对图像进行二值化处理

for j=1:n

if bar_Gray(i,j)>T%选择适当的阈值进行二值化处理

bar_10(i,j) = 1;

else

bar_10(i,j) = 0;

end

end

end

%imshow(bar_10);

l = 0;%检测59根条形码

for i=1:m

k = 1;

l = l+1;

for j=1:n-1

if bar_10(i,j)~=bar_10(i,j+1)%比较同一行相邻两点的颜色是否一致%bar_x(l,k) = i;

bar_y(l,k) = j; %记录转折点的纵坐标

k = k+1;%准备记录下一个数据点

end

if k>61 %点数大于60,该行应该删掉

l = l-1;

break

end

end

if k<61 %点数小于60,该行应该删掉

l = l-1;

end

end

[m,n] = size(bar_y);

if m<=1 %查看条形码是否有效

code = '0';

fprintf(1,'GameOver!\n');

return

end

for i=1:m%计算每根条形码的宽度

for j=1:n-1

bar_num(i,j) = bar_y(i,j+1) - bar_y(i,j);

if bar_num(i,j)<0

bar_num(i,j) = 0;

end

end

end

bar_sum = sum(bar_num)/m;%求每根条形码宽度的平均值k = 0;

for i=1:59%计算59根条形码的总宽度

k = k + bar_sum(i);

end

k = k/95;%计算单位条形码的宽度

for i=1:59%计算每根条形码所占位数

bar_int(i) = round(bar_sum(i)/k);

end

k = 1;

for i=1:59%将条形码转换成二进制数

if rem(i,2)

for j=1:bar_int(i)%黑色条用1表示

bar_01(k) = 1;

k = k+1;

else

for j=1:bar_int(i) %白色条用0表示

bar_01(k) = 0;

k = k+1;

end

end

end

if ((bar_01(1)&&~bar_01(2)&&bar_01(3))...%判断起始符是否正确

&&(~bar_01(46)&&bar_01(47)&&~bar_01(48)&&bar_01(49)&&~bar_01(50))... %判断中间分隔符是否正确

&&(bar_01(95)&&~bar_01(94)&&bar_01(93))) %判断终止符是否正确

l = 1;

for i=1:6 %将左侧42位二进制数转换为十进制数

bar_left(l) = 0;

for k=1:7

bar_left(l) = bar_left(l)+bar_01(7*(i-1)+k+3)*(2^(7-k));

end

l = l+1;

end

l = 1;

for i=1:6 %将右侧42位二进制数转换为十进制数

bar_right(l) = 0;

for k=1:7

bar_right(l) = bar_right(l)+bar_01(7*(i+6)+k+1)*(2^(7-k));

k = k-1;

end

l = l+1;

end

num_bar = '';

num_first = 0;

first = 2;

for i=1:6%从左边数据编码表中查出条形码编码数字for j=0:1

for k=0:9

if bar_left(i)==check_left(j+1,k+1)

num_bar = strcat(num_bar , num2str(k));

switch first%记录左边数据的奇偶顺序

case 2

first = j;

break;

case 1

num_first = num_first + j*(2^(6-i));

break;

case 0

num_first = num_first + ~j*(2^(6-i));

break;

otherwise

break;

end

end

end

end

end

for i=1:6%从右边数据编码表中查出条形码编码数字for j=0:9

if bar_right(i)==check_right(j+1)

num_bar = strcat(num_bar , num2str(j));

end

end

end

for i=0:9%从第一位数据编码表中查出第一位数字

if num_first==first_num(i+1)

num_bar = strcat(num2str(i) , num_bar);

break;

end

end

if numel(num_bar)~=13

fprintf(1,'Please Turn It Around!\n');

return

end

check_code = 0;

for i=1:12 %计算校验码

if rem(i,2)

check_code = check_code + str2double(num_bar(i));

else

check_code = check_code + str2double(num_bar(i))*3;

end

end

check_code = rem(check_code,10);

if check_code>0

check_code = 10 - check_code;

end

if check_code==str2double(num_bar(13)) %判断校验码是否正确code = num_bar;

else

fprintf(1,'Please Turn It Around!\n'); return

end

常用条形码类型及介绍范文

条形码类型及常见条形码介绍

条形码或条码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到了广泛的应用。 条形码类型 条码是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的信息。条码系统是由条码符号设计,制作及扫描阅读组成的自动识别系统。条码卡分为一维码和二维码两种。一维码比较常用,如日常商品外包装上的条码就是一维码。它的信息存储量小,仅能存储一个代号,使用时通过这个代号调取计算机网络中的数据。二维码是近几年发展起来的,它能在有限的空间内存储更多的信息,包括文字、图象、指纹、签名等,并可脱离计算机使用。 条码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码)、Codabar码(库德巴码)、Code25码(标准25码)、ITF25码(交叉25码)、Matrix25码(矩阵25码)、UPC-A码、UPC-E码、EAN-13码(EAN-13国际商品条码)、EAN-8码(EAN-8国际商品条码)、中国邮政码(矩阵25码的一种变体)、Code-B码、MSI码、Code11码、Code93码、ISBN码、ISSN 码、Code128码(Code128码,包括EAN128码)、Code39EMS(EMS专用的39码)等一维条码和PDF417等二维条码。 目前,国际广泛使用的条码种类有: EAN、UPC码——商品条码,用于在世界范围内唯一标识一种商品。我们在超市中最常见的就是EAN和UPC条码。 其中,EAN码是当今世界上广为使用的商品条码,已成为电子数据交换(EDI)的基础;UPC码主要为美国和加拿大使用; Code39码——因其可采用数字与字母共同组成的方式而在各行业内部管理上被广泛使用 ITF25码——在物流管理中应用较多 Codebar码——多用于血库,图书馆和照像馆的业务中 另还有Code93码,Code128码等。 除以上列举的一维条码外,二维条码也已经在迅速发展,并在许多领域找到了应用。 常用条码介绍 【EAN码介绍】 EAN码的全名为欧洲商品条码(European Article Number),源於西元1977年,由欧洲十二个工业国家所共同发展出来的一种条码。目前已成为一种国际性的条码系统。EAN条码系统的管理是由国际商品条码总会(International Article Numbering Association)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。

条形码识别

HEFEI UNIVERSITY 系别电子信息与电气工程系 专业电气信息类 班级电子(2)班 完成时间 2012-11-04 姓名学号周峰 0905073012

基于MATLAB的一维条码识别 摘要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量 大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响,而一般条码在搬运过程中条码会不可避免的破损,所以对质量较差的条码的条码的识别尤为重要。 不同的条码有着不同的识读过程。本设计研究一种基于图像处理方式的识读方法,通过一定的数字图像处理算法处理进行译码。译码算法主要分为两部分:第一部分首先对采集的条码图像进行预处理,图像的预处理包括图像分割,图像滤波等,良好的图像处理将对后面实现正确译码有重大贡献;第二部分就是对预处理后的条码图像进行译码,我们根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。借助于Matlab软件的功能我们完成这次译码工作。 关键词:图像处理条形码识别 EAN-13 图像滤波 Matlab

一、引言 1.1 条码技术概述 条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。 通俗的说条形码是指在浅色衬底上印有深色矩形的线条(也称条码)排列而成的编码,其码条和空白条的数量和宽度按一定的规则(标准)排列。条形码是由一组规则排列的条、空、相应的数字组成。这种用条、空组成的数据编码可以供机器识读,而且很容易译成二进制数和十进制数。这些条和空可以有各种不同的组合方法,构成不同的图形符号,即各种符号体系,适用于不同的应用场合。条形码是迄今为止最经济、实用的一种自动识别技术。 1.2Matlab应用图像处理 Matlab图像处理工具是由Math Works公司推出的用于数值计算的有力工具,它具有相当强大的矩阵运算和操作功能,力求人们摆脱繁杂的程序代码。Matlab图像处理工具箱提供了丰富的图像处理函数,灵活运用这些函数可以完成大部分图像处理工作。图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等) 、图像分析和统计、二值图像操作等。下面就MATLAB 在图像处理中各方面的应用分别进行介绍。主要包括下面几方面: (1) 图像文件格式的读写和显示。MATLAB 提供了图像文件读入函数 imread(),用来读取如:bmp,tif、tiff、pcx 、jpg 、gpeg 、hdf、xwd等格式图像文;图像写出函数 imwrite() ,还有图像显示函数 image()、imshow()等等。 (2) 图像处理的基本运算。MATLAB 提供了图像的和、差等线性运算,以及卷积、相关、滤波等非线性算。例如,conv2(I,J)实现了I,J两幅图像的卷积。 (3) 图像变换。MATLAB提供了一维和二维离散傅立叶变换(DFT)、快速傅立叶变换(FFT)、离散余弦变换(DCT),以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。 二、一维条码技术 2.1 一维条码符号的结构 通常任何一个完整的条码是由两侧空白区、起始符、数据字符、校验符、终止符组成,以一维条码而言,其排列方式通常如表2-1所示: 表2-1 条码符号结构

常用一维条形码编码规则.

常用一维条形码 139码(CODE39) 39码可以包含数字及英文字母。除了超市、零售业的应用中使用UPC/EAN码外,几乎在其他饿应用环境中,都是使用39码。39码是目前使用最广泛的条码规格,支持39码的软硬件设备也最齐全。 1.1 特征 ◆能表示44个字符,A-Z、0-9、SPACE、-、.、$、/、+、%、* ◆分散式,条码组之间使用细白条分隔 ◆两种宽度 ◆自我检查 ◆有扩展模式《Full ASCII Mode》 ◆检查码字符可有可无,视需求而定 1.2 组成 ◆各个字符有9条黑白相间,粗细不同的线条组成,其中6条为黑白细条3条黑白粗 条 ◆一串字符必须在头尾加上起始字符和结束字符“*” 1.3 校验方法 找到输入字符串每个字符对应值,求和,除以43,取余数。

1.4 条码说明

1.5 编码表 P.S. 在程序中可以使用“11”表示宽黑条,‘1’表示细黑条,“00”表示宽白条,“0”表示细白条。那么字符1就可以表示为110100101011。使用此方法建立一个编码表,每个字符可以长度为12的“01”字符串来表示。

1.6 典型CODE39条码 1.7 CODE39的扩展码 扩展码表同CODE93。但是扩展方式不同,39码使用$,/,+.%与其26个大写字母组合,表示ASCII码表中的其他字符。条空表示方式和校验方式与标准39码相同。 93码中使用的控制码与26个大写字母的组合。 293码(CODE93) 2.1 组成 ◆字母:A-Z,数字:0-9,符号:SPACE, - , . , $ , / , +, %, 控制码:$ , / , +, %,起始结束码: □ ◆每个字由9个模组成,包括3条粗细黑条及3条粗细白条。每一黑条或白条有可能为 1.2.3.4模组成 2.2 特征 ◆用4个控制码$, %, /, + 组合其他字母或符号,可编程FULL ASCII字母,读码器读到 上面4个控制码的组合时候,送出的字尾所对应的ASCII。 ◆有2个检验码C和K。 2.3 校验方法 ◆先查出资料所对应值,对应值的表如下

条形码自动识别技术

条形码自动识别技术 条形码自动识别技术2010-04-09 15:03条码本身不是一套系统,而是一 种十分有效的识别工具它提供准确及时的信息来支持成熟的管理系统。条码使 用能够逐渐地提高准确性和效率,节省开支并改进业务操作。 条码是由不同宽度的浅色和深色的部分(通常是条形)组成的图形,这些部 分代表数字、字母或标点符号。将由条与空代表的信息编码的方法被称作符号法。符号法有许多种。下面列举的是一些最常使用的符号法。 通用产品码(UPC码)和它在世界范围的相似物国际物品码(EAN码)在零售业被非常广泛地使用,它们正在工业和贸易领域中被广泛地接受。UPC/EAN码是 一种全数字的符号法(它只能表示数字)。 在工业、药物和政府应用中最浒的是39码,糨是一种字母与数字混合符号法,它具有自我检验功能,能够提供不同的长度和较高的信息安全性。它被一 些工斑马打印机业贸易组织所接受,包括汽车工业活动组织(AIAG)、保健工业 贸易通讯委员会(HIBCC)和美国国防部(DOD)。工业应用包括追踪生产过程、仓 库库存,还有识别影印领土这样的特别应用。作为一种字母与数字混合符号法,39码除有数字外,还能够支持大写字母并有一些标点符号。 与39码相比,128码是一种更便捷的符号法,糨能够代表整个ASCII字母 系列。它提供一种特殊的"双重密度"的全数字模式并有高信息安全性能。128 码正在逐渐代替39码。HIBCC和统一编码委员会(UCC)已接受一种特殊版本的128码(UCC/EAN-128)用来进行送货箱的标记。在ANSI的送货箱标记标准中也 承认UCC/EAN-128码。在需要将序号、批量号和其它有关信息输入到产品标签 上的应用中使用UCC/EAN-128码的趋势有进一步的发展。 两维码符号法正在跟进 两维码符号法是条码发展的下一步骤。它们比传统的条形码的密度高得多,所以能提供较高的信息完整程度。因为它们能够将更多的信息放入更小的面积内,所以它们为许多不同的应用所接受。

条形码Code码

Code 128 码 128码开始於1981年推出,是一种长度可变、连续性的字母数字条码。与其他一维条码比较起来,128码是较为复杂的条码系统,而其所能支援的字元也相对地比其他一维条码来得多,又有不同的编码方式可供交互运用,因此其应用弹性也较大。 128码的内容大致亦分为起始码、资料码、终止码、检查码等四部份,其中检查码是可有可无的。图是128码的范例与结构。 图128码的结构 128码具有下列特性: 1.具有A、B、C叁种不同的编码类型,可提供标准ASCII中128个字元的编码使用。 2.允许双向的扫瞄处理。 3.可自行决定是否要加上检查码。 4.条码长度可自由调整,但包括起码和终止码在内,不可超过232个字元。 5.同一个128码,可以不同的方式多以编码。藉由A、B、C叁种不同编码规则的互换可扩大 字元选择的范围,也可缩短编码的长度。 6.128码包含的字符有:0-9,A-Z,+-*/.,/$&()等 128码的编码方式 128码有叁种不同类型的编码方式,而欲选择何种编码方式,则决定於起始码的内容。 1.起始码

编码类别逻辑型态相对值 CODE A103 CODE B104 CODE C105 终止码 EAN-128码 目前我国所推行的128码是EAN-128码,EAN-128码是根据EAN/UCC-128码定义标准将资料转变成条码符号,并采用128码逻辑,具有完整性、紧密性、连结性及高可靠度的特性。辨识范围涵盖生产过程中一些补充性质且易变动之资讯,如生产日期、批号、计量等。可应用於货运栈版标签、携带式资料库、连续性资料段、流通配送标签等。其效益有: 1.变动性产品资讯的条码化。 2.国际流通的共通协议标准。 3.产品运送较佳的品质管理。 4.更有效的控制生产及配销。 5.提供更安全可靠的供给线。

条形码识别技术

1.条码技术概述 条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。随着70年代微处理器的问世,标志着“信息化社会”的到来,它要求人们对社会上各个领域的信息、数据实施正确、有效、及时的采集、传递和管理。因此如何代替人的视觉、人的手工操作、或者在复杂的环境中正确、迅速地获取信息并加以识别,成为人们普遍关心和有关人员精心研究的课题。 条码技术具有以下几个方面的优点: 1、可靠准确。有资料可查键盘输入平均每300个字符一个错误,而条码输入平均每15000个字符一个错误。如果加上校验位出错率是千万分之一。 2、数据输入速度快。与键盘输入相比较,用条形码扫描读入电脑的速度大约是键盘输入的100倍,并且能够实现“即时数据输入”,一个每分钟打90个字的打字员1.6秒可输入12个字符或字符串,而使用条码,做同样的工作只需0.3秒,速度提高了5倍。 3、经济便宜。与其它自动化识别技术相比较,推广应用条码技术,所需费用较低。 4、灵活、实用。条码符号作为一种识别手段可以单独使用,也可以和有关设备组成识别系统实现自动化识别,还可和其他控制设备联系起来实现整个系统的自动化管理。同时,在没有自动识别设备时,也可实现手工键盘输入。 5、自由度大。识别装置与条码标签相对位置的自由度要比OCR大得多。条码通常只在一维方向上表达信息,而同一条码上所表示的信息完全相同并且连续,这样即使是标签有部分缺欠,仍可以从正常部分输入正确的信息。 6、设备简单。条码符号识别设备的结构简单,操作容易,无需专门训练。 7、易于制作,可印刷,称作为“可印刷的计算机语言”。条码标签易于制作,对印刷技术设备和材料无特殊要求。 正因为条码具有上述迅速,准确,廉价,使用方便,适应性强等优点,克服了其他输入方法的不足,所以他在各个行业中的发展可谓突飞猛进,最初应用

matlab一维条形码码字识别程序

close all I = imread('E:\txm.jpg'); J= rgb2gray(I); figure(1) imshow(J); title('灰度化图像 '); [e1,e2]=size(J); Im=imcrop(J,[e2/2-200,e1/2-200,400,400]); figure(2) subplot(1,2,1),imshow(Im) title('中心区域 '); subplot(1,2,2),imhist(Im) title('中心区域直方图'); [xa,ya]=size(Im); b=double(Im); zd=double(max(Im)) ; zx=double(min(Im)) ; T=double((zd+zx))/2; count=double(0); while 1 count=count+1; S0=0.0; n0=0.0; S1=0.0; n1=0.0; for i=1:xa for j=1:ya if double(Im(i,j))>=T S1=S1+double(Im(i,j)); n1=n1+1; else

S0=S0+double(Im(i,j)); n0=n0+1; end end end T0=S0/n0; T1=S1/n1; if abs(T-((T0+T1)/2))<0.1 break; else T=(T0+T1)/2; end end count T K=find(J=T); J(K)=255; figure(3) imshow(J) title(' 图像二值化 '); B=medfilt2(J,[5,1]); figure(4) imshow(B) title('中值滤波后图像'); [y0,x0]=size(B); BW = edge(B,'log'); figure(5);imshow(BW);title('边缘检测图像')

一维条码的工作原理

AIDC技术中最古老最成熟的技术就是条码技术,它也是AIDC技术中应用最广泛和最成功的技术。我们从超级市场上买回来的果品、蜂蜜等,果品箱、蜂蜜罐上肯定会有编码,不管是超级市场自己编的条码,还是商品制造者商标上的条码。实际上,条码的种类是很多的,已知的条码种类现在就有250种之多。条码技术的主要优点如下: ?简单:条码符号制作容易,扫描操作简单易行; ?信息采集速度快:普通计算机的键盘录入速度是每分钟200字符,而利用条码扫描录入信息的速度是键盘录入的20倍; ?采集信息量大:利用条码扫描,一次可以采集十几位字符的信息,而且可以通过选择不同码制的条码增加字符密度,使录入的信息量成倍地增加; ?设备结构简单,成本低。 在实际应用中,条码一般可以分成一维条码、二维条码两种。下面对一维条码简单介绍:一维条码(线形条码) 这种条码是由一个接一个的“条”和“空”排列组成的,条码信息靠条和空的不同宽度和位置来传递,信息量的大小是由条码的宽度和印刷的精度来决定的,条码越宽,包容的条和空越多,信息量越大;条码印刷的精度越高,单位长度内可以容纳的条和空越多,传递的信息量也就越大。这种条码技术只能在一个方向上通过“条”与“空”的排列组合来存储信息,所以叫它“一维条码”。 1、一维条码技术的基础术语 1)条(BAR):条码中反射率较低的部分,一般印刷的颜色较深。 2)空(SPACE):条码中反射率较高的部分,一般印刷的颜色较浅。 3)空白区(CLEAR AREA):条码左右两端外侧与空的反射率相同的限定区域。 4)起始符(START CHARACTER):位于条码起始位置的若干条与空。 5)终止符(STOP CHARACTER):位于条码终止位置的若干条与空。 6)中间分隔符(CENTRAL SEPERATING CHARACTER):位于条码中间位置的若干条与空。 7)条码数据符(BAR CODE DATD CHARACTER):表示特定信息的条码符号。 8)校验符(CHECK CHARACTER):表示校验码的条码若干条与空。 9)供人识别字符(HUMAN READABLE CHARACTER):位于条码符的下方,与相应的条码相对应的、用于供人识别的字符。 2、一维条码的结构

一维条形码与二维条形码

一、什么是条码? 答:条码是由一组规则排列的条、空或与其相对应的字符组成的标记,用以表示一定的信息。这种用条、空组成的数据编码可以供机器识读,而且很容易译成二进制数和十进制数。这些条和空可以有各种不同的组合方法,从而构成不同的图形符号,即各种符号体系,也称码制,适用与不同的场合。 二、什么是一维条码? 答:一维条码又称线形条码。我们通常把那些只在一个方向(一般是水平方向,在垂直方向则不表达任何信息)表达信息的条码叫一维条码。如:我们经常看到的各种商品上的条码、挂号信和特快专递上的条码

都属于一维条码。目前使用频率最高的几种码制是:EAN、UPC、三九码、交插二五码和128码。 三、一维条码目前都有哪些应用? 答:一维条码广泛的应用于仓储、邮电、运输、商业盘点等许多领域。应用最广泛、最为人们熟悉的还是通用商品流通销售领域的POS(Point Of Sale)系统,也称为销售终端或扫描系统。北美、欧洲各国和日本普遍采用POS系统,其普及率已达95%以上。条形码技术在电子政务公文流转领域的应用始于远光公司在1999年研发的公文流转智能管理系统,该系统应用在我国最大的机要文件交换机构——国务院办公厅中央国家机关机要文件交换站中,这是全国第一个将条形码自动识别技术应用于公文流转领域的信息管理系统。 四、什么是二维条码? 答:在水平和垂直方向的二维空间存储信息的条码,称为二维条码。二维条码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带,并可用机器自动识读的理想手段,能够不依赖数据库及通讯网络而单独应用。 五、二维条码是如何分类的? 答:从结构上讲,二维条码分为两类,其中一类由矩阵代码和点代码组成,其数据是以二维空间的形态编码的;另一类由多行条码符号组成,其数据以成串的数据行显示。常用的码制有CODE49、CODE16K、PDF417。PDF是便携式数据文件(PORTABLE DATA FILE)的缩写,417则与宽度代码有关,用来对字符编码。PDF417 由美国Symbol公司研制,是中国现行唯一通过国家标准认证的二维条码。 六、二维条码有哪些特点? 答:二维条码密度高,信息含量大,保密、防伪性能好,可以将照片、指纹、掌纹、视网膜、声音、签名、

matlab一维条形码码字识别程序讲解学习

m a t l a b一维条形码码字识别程序

close all I = imread('E:\txm.jpg'); J= rgb2gray(I); figure(1) imshow(J); title('灰度化图像 '); [e1,e2]=size(J); Im=imcrop(J,[e2/2-200,e1/2-200,400,400]); figure(2) subplot(1,2,1),imshow(Im) title('中心区域 '); subplot(1,2,2),imhist(Im) title('中心区域直方图'); [xa,ya]=size(Im); b=double(Im); zd=double(max(Im)) ; zx=double(min(Im)) ; T=double((zd+zx))/2; count=double(0); while 1 count=count+1; S0=0.0; n0=0.0; S1=0.0; n1=0.0; for i=1:xa for j=1:ya if double(Im(i,j))>=T S1=S1+double(Im(i,j)); n1=n1+1; else S0=S0+double(Im(i,j)); n0=n0+1; end end end T0=S0/n0; T1=S1/n1; if abs(T-((T0+T1)/2))<0.1 break;

else T=(T0+T1)/2; end end count T K=find(J=T); J(K)=255; figure(3) imshow(J) title(' 图像二值化 '); B=medfilt2(J,[5,1]); figure(4) imshow(B) title('中值滤波后图像'); [y0,x0]=size(B); BW = edge(B,'log'); figure(5);imshow(BW);title('边缘检测图像') %function code = barcode(pic) %条形码识别 check_left = [13,25,19,61,35,49,47,59,55,11;... %左边数据编码,奇39,51,27,33,29,57, 5,17, 9,23]; %左边数据编码,偶 check_right = [114,102,108,66,92,78,80,68,72,116]; %右边数据编码first_num = [31,20,18,17,12,6,3,10,9,5];%第一位数据编码 bar = imread('E:\txm.jpg');%读输入条形码图片 bar_Gray = rgb2gray(bar);%将RGB图片转换灰度图 [a_hist x] = imhist(bar_Gray); hist_max = []; if a_hist(1)>a_hist(2) hist_max = [hist_max 1]; end x = max(x); for i=2:x if a_hist(i)>a_hist(i-1) && a_hist(i)>a_hist(i+1) hist_max = [hist_max i]; end end

一维条码和二维条码的区别

一维条码(1D Barcode) 一维条码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准。 一维条码的应用可以提高信息录入的速度,减少差错率,但是一维条码也存在一些不足之处: ●数据容量较小: 30个字符左右 ●只能包含字母和数字 ●条码尺寸相对较大(空间利用率较低) ●条码遭到损坏后便不能阅读 二维条码(2D Barcode) 在水平和垂直方向的二维空间存储信息的条码,称为二维条码(2-dimensional bar code).二维条码的分类 与一维条码一样,二维条码也有许多不同的编码方法,或称码制。就这些码制的编码原理而言,通常可分为以下三种类型 1.线性堆叠式二维码是在一维条码编码原理的基础上,将多个一维码在纵向堆 叠而产生的。典型的码制如:Code 16K、Code 49、PDF417等。 2.矩阵式二维码是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编 码。典型的码制如: Aztec、Maxi Code、QR Code、 Data Matrix等。 3.邮政码通过不同长度的条进行编码,主要用于邮件编码,如:Postnet、BPO 4-State。 在许多种类的二维条码中,常用的码制有:Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K 等,其中: ●Data Matrix 主要用于电子行业小零件的标识,如Intel的奔腾处理器的 背面就印制了这种码。 ● Maxi Code 是由美国联合包裹服务(UPS)公司研制的,用于包裹的分拣 和跟踪。 ●* Aztec 是由美国韦林(Welch Allyn)公司推出的,最多可容纳3832个 数字或3067个字母字符或1914个字节的数据。 特点 1.信息容量大例如PDF417码除可以表示字母、数字、ASCII字符外,还能表达 二进制数。 2.错误纠正能力一维条码通常具有校验功能以防止错读,一旦条码发生污损将 被拒读。而二维条码不仅能防止错误,而且能纠正错误,即使条码部分损坏, 也能将正确的信息还原出来。 3.印制要求不高普通打印设备均可打印,传真件也能阅读。 4.可用多种阅读设备阅读 PDF417码可用带光栅的激光阅读器,线性及面扫描的 图像式阅读器阅读。 5.尺寸可调以适应不同的打印空间

条形码识别系统

一、条形码识别原理 条形码的识别原理由于不同颜色的物体,其反射的可见光的波长不同,白色物体能反射各种波长的可见光,黑色物体则吸收各种波长的可见光,所以当条形码扫描器光源发出的光经光阑及凸透镜1后,照射到黑白相间的条形码上时,反射光经凸透镜2聚焦后,照射到光电转换器上,于是光电转换器接收到与白条和黑条相应的强弱不同的反射光信号,并转换成相应的电信号输出到放大整形电路.白条、黑条的宽度不同,相应的电信号持续时间长短也不同.但是,由光电转换器输出的与条形码的条和空相应的电信号一般仅10mV左右,不能直接使用,因而先要将光电转换器输出的电信号送放大器放大.放大后的电信号仍然是一个模拟电信号,为了避免由条形码中的疵点和污点导致错误信号,在放大电路后需加一整形电路,把模拟信号转换成数字电信号,以便计算机系统能准确判读.整形电路的脉冲数字信号经译码器译成数字、字符信息.它通过识别起始、终止字符来判别出条形码符号的码制及扫描方向;通过测量脉冲数字电信号0、1的数目来判别出条和空的数目.通过测量0、1信号持续的时间来判别条和空的宽度.这样便得到了被辩读的条形码符号的条和空的数目及相应的宽度和所用码制,根据码制所对应的编码规则,便可将条形符号换成相应的数字、字符信息,通过接口电路送给计算机系统进行数据处理与管理,便完成了条形码辨读的全过程. 图解条形码无线扫描器设计原理 摘要:本文介绍了一种工程实用条码扫描器硬件系统设计。该扫描器能快速扫描一维或二维条码,同时还具有本地显示、存储信息、对外进行无线通讯等功能。 关键词:条形码;无线传输;mPSD3254BV单片机 在当今工业社会向信息社会,工业经济向知识经济发展过程中,自动识别技术正发挥着越来越重要的作用。在需要物品识别,数据扫描,信息登陆的业务领域,使用自动识别技术,可提高对物品及相关信息进行管理的效率和可靠性。条码数据扫描器正是为此设计的。 本无线扫描器以单片机mPSD3254BV 为核心,通过扫描子系统可以扫描一维或二维条型码,键盘和显示系统方便用户进行人机交流,无线传送模块可以将现场采集到的数据发送到其它设备,同时本扫描器也能存储上万条数据信息,整个系统采用锂电池供电,可以连续工作40小时,当采集数据异常状态时,系统会自动蜂鸣,振动提醒用户。系统结构如图1如示。

条形码识别技术

一维条形码生成与识别技术 一、引言 条形码(简称条码)技术是集条码理论、光电技术、计算机技术、通信技术、条码印制技术于一体的一种自动识别技术。条形码是由宽度不同、反射率不同的条(黑色)和空(白色),按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符。条形码符号也可印成其它颜色,但两种颜色对光必须有不同的反射率,保证有足够的对比度。条码技术具有速度快、准确率高、可靠性强、寿命长、成本低廉等特点,因而广泛应用于商品流通、工业生产、图书管理、仓储标证管理、信息服务等领域。 二、EAN-13条形码简介 一维条码主要有EAN和UPC两种,其中EAN码是我国主要采取的编码标准。EAN是欧洲物品条码(European Article Number Bar Code)的英文缩写,是以消费资料为使用对象的国际统一商品代码。只要用条形码阅读器扫描该条码,便可以了解该商品的名称、型号、规格、生产厂商、所属国家或地区等丰富信息。 EAN通用商品条码是模块组合型条码,模块是组成条码的最基本宽度单位,每个模块的宽度为毫米。在条码符号中,表示数字的每个条码字符均由两个条和两个空组成,它是多值符号码的一种,即在一个字符中有多种宽度的条和空参与编码。条和空分别由1~4个同一宽度的深、浅颜色的模块组成,一个模块的条表示二进制的“1”,一个模块的空表示二进制的“0”,每个条码字符共有7个模块。即一个条码字符条空宽度之和为单位元素的7倍,每个字符含条或空个数各为2,相邻元素如果相同,则从外观上合并为一个条或空,并规定每个字符在外观上包含的条和空的个数必须各为2个,所以EAN码是一种(7,2)码。 EAN条码字符包括0~9共10个数字字符,但对应的每个数字字符有三种编码形式,左侧数据符奇排列、左侧数据符偶排列以及右侧数据符偶排列。这样十个数字将有30种编码,数据字符的编码图案也有三十种,至于从这30个数据字符中选哪十个字符要视具体情况而定。在这里所谓的奇或偶是指所含二进制“1”的个数为偶数或奇数[2]。 EAN-13码的格式 EAN条形码有两个版本,一个是13位标准条码(EAN-13条码),另一个是8位缩短条码(EAN-8条码)。EAN-13条码由代表13位数字码的条码符号组成,如图1所示[1]。

条码识别与扫描原理

识别原理 要将按照一定规则编译出来的条形码转换成有意义的信息,需要经历扫描和译码两个过程。物体的颜色是由其反射光的类型决定的,白色物体能反射各种波长的可见光,黑色物体则吸收各种 波长的可见光,所以当条形码扫描器光源发出的光在条形码上反射后,反射光照射到条码扫描器内部的光电转换器上,光电转换器根据强弱不同的反射光信号,转换成相应的电信号。根据原理的差异,扫描器可以分为光笔、红光CCD、激光、影像四种。电信号输出到条码扫描器的放大电路增强信号之后,再送到整形电路将模拟信号转换成数字信号。白条、黑条的宽度不同,相应的电信号持续时间长短也不同。主要作用就是防止静区宽度不足。然后译码器通过测量脉冲数字电信号0,1的数目来判别条和空的数目。通过测量0,1信号持续的时间来判别条和空的宽度。此时所得到的数据仍然是

杂乱无章的,要知道条形码所包含的信息,则需根据对应的编码规则(例如:EAN-8码),将条形符号换成相应的数字、字符信息。最后,由计算机系统进行数据处理与管理,物品的详细信息便被识别了。 扫描原理 条形码的扫描需要扫描器,扫描器利用自身光源照射条形码,再利用光电转换器接受反射的光线,将反射光线的明暗转换成数字信号。不论是采取何种规则印制的条形码,都由静区、起始字符、数据字符与终止字符组成。有些条码在数据字符与终止字符之间还有校验字符。 ▲静区:静区也叫空白区,分为左空白区和右空白区,左空白区是让扫描设备做好扫描准备,右空白区是保证扫描设备正确识别条码的结束标记。 为了防止左右空白区(静区)在印刷排版时被无意中占用,可在空白区加印一个符号(左侧没有数字时印<;号,右侧没有数字时加印>;号)这个符号就叫静区标记。主要作用就是防止静区宽度不足。只要静区宽度能保证,有没有这个符号都不影响条码的识别。 ▲起始字符:第一位字符,具有特殊结构,当扫描器读取到该字符时,便开始正式读取代码了。 ▲数据字符:条形码的主要内容。 ▲校验字符:检验读取到的数据是否正确。不同编码规则可能会有不同的校验规则。 ▲终止字符:最后一位字符,一样具有特殊结构,用于告知代码扫描完毕,同时还起到只是进行校验计算的作用。 为了方便双向扫描,起止字符具有不对称结构。因此扫描器扫描时可以自动对条码信息重新排列。条码扫描器有光笔、CCD、激光、影像四种 ▲光笔:最原始的扫描方式,需要手动移动光笔,并且还要与条形码接触。

Halcon识别一维码的代码实例

Stage I's hdev的代码实例 =============================================================================== * Autodiscrimination A.hdev * * Code generated by Image Acquisition 03 * 获取条形码,并计算及显示解码时间,并从规定读取的条码类型范围中读取被解码的条码类型也可设置成不规定条码类型即自动识别,但会增加解码时间,甚至出现误读的情况。 * 可读取多个不同类型的条码,并且多个条码用不同颜色的区域框区分,且读取出来的信息也以相应的颜色做区分 dev_close_window () dev_open_window (0, 0, 600, 600, 'black', WindowHandle) *先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle; *相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Gsou USB2.0 Camera', 0, -1, AcqHandle) * 打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子注意,采集器名称不同要更改,或者用助手获取也可以。grab_image_start (AcqHandle, -1) while (true) grab_image_async (Image, AcqHandle, -1) *开始条形码识别 create_bar_code_model ([], [], BarCodeHandle) *必备的创建条码解码的开头,下面有一段结束代码 dev_update_var ('off') dev_update_pc ('off') dev_update_window ('off') * 刷新窗体 set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

你必须知道的条码知识讲解

你必须知道的条码知识 你知道条码吗?你了解条码吗?条码其实很简单地来说就是条形码,是由黑白两色的线条组成的图案,现在主要分一维码和二维码。我们在超市买东西时收银员用扫描枪扫的那些长方形的一排竖着的线条就是最早的一维码,而那些正方形的黑白图案则是二维码。为了方便您更快更准的选购适合您用的条码耗材,以下给您详细的讲解条码方面的知识。 条形码或条码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标

识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到了广泛的应用。 条形码类型及常见条形码介绍 条码是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的信息。条码系统是由条码符号设计,制作及扫描阅读组成的自动识别系统。条码卡分为一维码和二维码两种。一维码比较常用,如日常商品外包装上的条码就是一维码。它的信息存储量小,仅能存储一个代号,使用时通过这个代号调取计算机网络中的数据。二维码是近几年发展起来的,它能在有限的空间内存储更多的信息,包括文字、图象、指纹、签名等,并可脱离计算机使用。

条码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码)、Codabar码(库德巴码)、Code25码(标准25码)、ITF25码(交叉25码)、Matrix25码(矩阵25码)、UPC-A码、UPC-E码、EAN-13码(EAN-13国际商品条码)、EAN-8码(EAN-8国际商品条码)、中国邮政码(矩阵25码的一种变体)、Code-B码、MSI码、Code11码、Code93码、ISBN码、ISSN码、Code128码(Code128码,包括EAN128码)、Code39EMS(EMS专用的39码)等一维条码和PDF417等二维条码。 目前,国际广泛使用的条码种类有: EAN、UPC码——商品条码,用于在世界范围内唯一标识一种商品。我们在超市中最常见的就是EAN和UPC条码。 其中,EAN码是当今世界上广为使用的商品条码,已成为电子数据交换(EDI)的基础;UPC码主要为美国和加拿大使用;

一维条形码规格

▲一维条形码规格 条形码是用来方便人们输入数据的一种方法,这种方法是将要输入计算机内的所有字符,以宽度不一的线条(Bar)及空白(Space)组合来表示每一字符相对应的码(Code)。其中空白亦可视为一种白色线条,不同的一维条形码规格有不同的线条组合方式。 在一个条形码的起头及结束的地方,都会放入起始码及结束码,用以辨识条形码的起始及结束,不过不同条形码规格的起始码及结束码的图样并不完全相同。具体而言,每一种条形码规格明定了下列七个要项: 1.字符组合(Character Set) 每一种条形码规格所能表示的字符组合,有不同的范围及数目,有些条形码规格只能表示数字,如UPC码、EAN码;有些则能表示大写英文字及数字,甚至能表示出全部ASCII字符表上的128字符,如39码、128码。 2.符号种类(Symbology Type) 依据条形码被解读时的特性可将条形码规格分成两大类: ?分布式 每一个字符可以独自地译码,打印时每个字符与旁边的字符间,是 由字间距分开的,而且每个字符固定是以线条做为结束。然而,并 不一定是每一个字间距的宽度大小都必须相同,可以容许某些程度 的误差,只要彼此差距不大即可,如此,对条形码打印机(Barcode Printer)的机械规格要求可以比较宽松。例如39码与128码。 ?连续式 字符之间没有字间距,每个字符都是线条开始,空白结束。且在每 一个字的结尾后,马上就紧跟下一个字符的起头。由于无字间距的 存在,所以在同样的空间内,可打印出较多的字符数,但相对地, 因为连续式条形码的密度比较高,其对条形码机的打印精密度的要 求也较高。例如UPC和EAN码。 3.粗细线条的数目 条形码的编码方式,是藉由许多粗细不一的线条及空白的组合方式来表示不同的字符码。大多数的条形码规格都是只有粗和细两种线条,但也有些条形码规格使用到二种以上不同粗细的线条。

基于VC一维条形码识别

嵌入式系统综合设计 题目:基于VC的一维条形码 识别 学号: 20124830248____ 姓名:张文天______ 班级:12计科A2_____ 专业:计算机科学与技术 指导教师:侯东良______ 日期: 2015 年12 月20日

基于VC的一维条形码识别 摘要 条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。 本系统采用Micosoft Visual C++6.0作为系统软件的编程语言和编译环境。设计研究主要分为两部分:一维条形码的预处理和一维条形码图像的特征提取和识别。第一部分首先对采集的EAN-13条码图像进行预处理,图像的预处理主要是条形码灰度图像的二值化处理,良好的图像处理将对后面实现正确译码有至关重要的作用。第二部分就是对预处理后的条码图像进行特征提取和是识别,我们根据条形码的纹理特点和规则,对其进行特征提取和识别。得到条码所表示的文本信息。 关键词:图像处理、条形码识别、EAN-13、二值化、VC6.0

目录 1 绪论 (3) 1.1 条码技术概述 (3) 1.2 Visual C++数字图像处理基础 (4) 1.3 文本研究意义及内容 (5) 1.3.1 研究意义 (5) 1.3.2 研究内容 (6) 2 一维条形码技术 (6) 2.1 一维条形码简介 (6) 2.2 EAN-13码简述 (7) 2.2.1 EAN-13码的构造 (7) 2.2.2 EAN-13码的编码规则 (8) 2.2.3 EAN-13编码的校验方法 (10) 3 一维条形码的识别 (10) 3.1 图像的预处理 (10) 3.1.1 图像的二值化处理 (10) 3.1.2 条码图像的提取 (12) 3.2条码图像的字符识别 (12) 4 结论 (13) 参考文献 (1)

条码code128编码规则

条码CODE128编码规则 CODE128简介 CODE128码于1981年推出,是一种长度可变、连续性的字母数字条码。与其他一维条码比 较起来,相对较为复杂,支持的宇元也相对较多,又有不同的编码为式可供交互运用,因此其应 用弹性也较大。 CODE 128 特性 1、具有A、B、C三种不同的编码类型,可提供标准ASC II中128个宇元的编码使用; 2、允许双向扫描; 3、可自行决定是否加上校验位; 4、条码长度可调,但包括开始位和结束位在内,不可超过232个字元; 5、同一个CODE128码可以由A、B、C 三种不同编码规则互换,既可扩大字元选择的范围, 也可缩短编码的长度。 CODE 128编码方式的编码范围 1、CODE128A:标准数字、大写字母、控制符及特殊宇符; 2、CODE128B:标准数字、大写宇母、小写字母及特殊字符; 3、CODE128C/EAN128: [00]~[99]的数字对集合,共100个,既只能表示偶数位长 度的数字。 CODE 128编码规则 开始位+[FNC1(为EAN128码时附加)]+数据位+校验位+结束位 CODE 128校验位计算 (开始位对应ID+每位数据在整个数据中的位置×每位数据对应的ID值)% 103 CODE 128编码表 ID ASC II Cade128A Cade128B Cade128C BandCode 编码值 0 32 SP SP 00 212222 11011001100 1 33 ! ! 01 22212 2 11001101100 2 34 “ “ 02 222221 11001100110 3 35 # # 03 121223 10010011000 4 36 $ $ 04 121322 100h0001100

相关文档
最新文档