精华内容
下载资源
问答
  • 可以将快递单订单照片、商品条码的照片等一切带条码的图片,批量一次性按照条码的内容重命名,提高办公效率
  • 硬件平台使用正点原子的mini开发板(STM32F103RCT6),使用某宝的二维条码识别模块,通过串口实现对条形码、二维码的识别显示代码
  • 基于matlab的条形码识别,很简单的一个小程序,帮助建立信心
  • 该项目实现了对EAN13,Code39,Code93,Code128的条形码识别,包含了指定编码方式和不指定两种重载方式,代码结构清晰,易于新手理解,易于读者根据需求截取部分代码。旨在互相学习,高手请勿喷,谢谢。
  • 开发环境VS2015-C#,程序实现了OpencvShare+ZXing/ZBar的条形码识别,ZBar可同时识别多个条形码。准确率非常高。
  • 条码扫描,用于ZBar为基础的条码扫描,包含了自动对焦等,响应速度快,识别率搞,亲测了一下,还行。
  • labview条形码识别

    2015-12-10 19:05:45
    基于labview条形码识别,亲测可用,有很高的参考价值!希望能帮到大家
  • halcon条码识别代码

    2017-12-21 09:47:52
    用halcon打开可以直接运行,并搭配图片,能识别图片中的条码,并显示出来
  • 该程序为labview 条形码识别及生成程序,而且还加入了图片保存等功能,可以作为labview条形码学习的参考资料
  • 条形码识别源代码

    2013-11-04 19:16:54
    通过对图像的剪切,灰度化,二值化,去噪点,来识别条形码、二维码。本源码附参考文献和测试图像。
  • 使用ios自带的二维码识别类,可以识别二维码,条形码。以及支持从相册中选择带有二维码和条形码的图片进行识别
  • 利用opencv实现简单的条形码检测与识别-C++语言实现。利用opencv实现简单的条形码检测与识别-C++语言实现。利用opencv实现简单的条形码检测与识别-C++语言实现。
  • C# OCR条形码识别

    2015-04-23 11:03:37
    C# OCR条形码识别
  • c语言 条形码识别

    2013-06-30 14:15:36
    c语言 条形码识别
  • 开发环境VS2015/C#,使用OpenCvSharp加ZXing实现条形码的定位和识别
  • 二维码/条形码识别工具(C#/.Net Framework4.5)
  • 基于数字图像处理的条形码识别方法 一种条形码识别方法 适合学习数字图像处理的同学看
  • 批量识别条形码

    2018-11-04 20:32:15
    VS2010开发,调用zxing和Vintasoft.Barcode识别文件夹中条码
  • java条形码识别

    热门讨论 2012-01-18 11:45:23
    条形码识别Google版,jar包,源代码
  • 二维码条形码 微信小程序,实现二维码、条形码识别与生成 微信扫描以下小程序码进入: 小程序功能 二维码、条形码识别 二维码生成 识别、生成历史 识别、生成详情 二维码生成 二维码生成使用:
  • 基于MATLAB的一维码识别系统使用的时候,要先设置好视频参数(在程序界面右边),分辨率要求不小于640x480, 设置好参数后最后才可以按下start按键。 这里还要提一点,摄像头的图像格式不一定是rgb,但程序要求处理...
  • JS实现识别条形码

    2018-10-08 10:36:50
    利用 quagga.js 实现 识别条形码 打开页面即可使用 简单易懂
  • Barcode Scanner Module 是条形码、二维码扫描识别模块,我通过图像智能识别算法, 可快速准确地读取纸质或屏幕上的一维条码及二维码。体积小巧,板载 USB 和 UART 接口, 即可直接接入计算机使用,也可集成到各种...
  • MATLAB 条形码识别

    2019-06-10 19:57:27
    注意matlab程序最好不要用中文命名,文件的保存的路径也不要用中文,否则可能会报错。 使用的时候,要先设置好视频参数(在程序界面右边),分辨率要求不小于640x480, 设置好参数后最后才可以按下start按键。...
  • 生成一个条形码识别程序,用于识别条形码。
  • 【百度快照】基于MATLAB GUI的条形码识别系统

    千次阅读 多人点赞 2020-02-06 20:24:06
    本设计为基于MATLAB的条形码识别系统,带有一个GUI界面。 1.1.1 程序总体设计思路 在上节中我们简单的介绍了MATLAB的发展以及优点。在以后的章节中将阐述如何应用MATLAB编程实现对条形码的识别。在这一节中将主要介...

    源码GUI框架戳这里,戳我戳我戳我
    1.1 应用MATLAB识别条形码总体设计
    本设计为基于MATLAB的条形码识别系统,带有一个GUI界面。
    GUI设计
    1.1.1 程序总体设计思路
    在上节中我们简单的介绍了MATLAB的发展以及优点。在以后的章节中将阐述如何应用MATLAB编程实现对条形码的识别。在这一节中将主要介绍编程的总体思路。
    首先将含有条形码信息的图片读入到MATLAB中去,这个图片将以矩阵的形式存储在MATLAB中。这样,我们就能通过对矩阵的运算来实现对图片的处理。由于条形码一般都是黑白的,这样我们的第一步就是要把图片行二值化处理,用于去除那些不需要的细节。然后就要确定条形码所在的位置。这一步至关重要,如果定位不准确,我们就不能获取条形码所有的信息,以至于不能准确的识别。找到条形码准确位置后。就要对条形码信息提取,然后在按照比例将提取到的条形码信息转换成标准模块组成的条形码。最后通过相应的译码得到条形码中的数字,判别是否正确后输出,这样就完成了条形码识别的整个过程。
    预处理
    图像处理的结果

    1.1.2 程序总体设计流程图

       主程序的流程图可以用图4-1来表示。
    

    流程图
    图4-1主程序流程图

    1.3 各部分子程序说明
    上一节中我们分析了条形码识别的主体设计思路,在本节中我们将介绍程序各部分的作用以及实现方法。
    1.3.1 读入图片并二值化处理
    在这个步骤中,我们的主要任务是把含有条形码信息的图片文件放到MATLAB的工作区中去。当图片经过imread命令后,MATLAB会给图片开辟一个存储空间,把图片各像素点的值储存到一个矩阵中。读入图片格式一般都是 .jpg, . bmp,等格式,这样格式的图片每一个点都有其相应的R、G、B值,这不仅增大了MATLAB的运算量,而且还大大降低了识别的准确性。
    这就要求我们先对图像进行二值化处理。因为条形码在正常情况下是黑白的。这种方法可以去除与条形码不相关的信息,这些信息对条形码的识别是不起作用的。这样既可以提高效率,又可以提高准确性。
    图4-2和图4-3表示了二值化前后两个图像的对比。通过对比我们发现,二值化后图像更加简洁,我们需要的条形码符号更加清晰,容易进行识别。这也为我们以后的识别工作做了很好的铺垫。

    1.3.2条形码的定位
    上一个过程结束后,存储在MATLAB中的信息只有‘0’和‘1’,其中图像中黑色的部分用‘0’表示,白色部分用‘1’表示。

    灰度二值图像处理
    图4-2 二值化前的图片 图4-3 二值化后的图片
    所谓条形码的定位就是找到条形码的确切位置,这样我们才能够到相应位置去提取条形码信息。由于条形码的前后都有9个模块的空白区,这些知识我们在第二章中我们已经做了详细的介绍。所以我们可以通过条形码前面的空白区来定位条形码,如果我们找到条形码前面空白区也就完成了对条形码的定位。
    假设我们定义条形码中每个模块所占的像素数为4,那么条形码空白区在水平方向上总共占的像素数为36。在竖直方向上每个条形码的长度都是不同的,但大约都是水平宽度的4~5倍。考虑到边缘的噪声问题。我们选取了一个120×30的单位矩阵作为空白区域的特征矩阵。接下来,对整幅图像进行逐点扫描。扫描到一点时,以这一点为原点与特征矩阵比较,如果相等,程序则返回该点的值,这一点就是条形码左上角的点,如果不相等,继续扫描下一点。其主要的程序流程图如图4-4所示。经过提取条形码如图4-5所示条形码被置于整个图片左上方。
    定位流程图
    提取到的条形码图4-5 提取后的条形码

    1.3.3条形码信息的提取
    找到条形码的起始坐标后,我们就能对条形码的信息进行提取了。首先以条形码的起始坐标为依据提取一行含有条形码信息的数据。通过对起始符,结束符,以及左右空白区的判断,我们可以准确的找到条形码中间的数据区域。接下来我们将对条形码的数据区域进行进一步的处理,把条形码转换成标准模块的条形码,也就是每个模块都是有‘0’或‘1’表示。
    1.3.4条形码单元的判断
    条形码的单元指的是我们看到的条形码中的条和空,每一个单元都是有1~4个模块组成的。本步的主要工作是判断条形码中每个单元的数据(0或1)和其所占的像素数。其主要程序的流程图如图4-6所示。
    1.3.5条形码模块的识别
    模块是组成条形码最基本的单位,在识别的过程中识别出每个模块的值我们就能对条形码进行判别了。上一步我们得到了条形码每个单元的数据以及宽度(所占像素数),把所有单元的像素数相加就可以得出整个条形码所占的总像素数了。在第二章中,我们在介绍了EAN-13码的基本构成,不包括条形码的左右空白区总空有95个模块组成。这样就可以知道每个模块所占的像素数了。进而可以计算出每个单元的模块数。主要程序如下:
    单元判别图
    完成上述两个步骤后我们已经将各个模块单元化了。也就是说每个模块都是由一个单位的0或1表示的,转换成了条形码的逻辑值。经过处理后条形码的图像如图4-7所示。我们可以把这幅图像与图4-5做一比较,条形码明显清晰。
    得到条形码区域
    图4-7 经过整形后单位模块的条形码

    1.3.6条形码数字判别
    到现在为止,我们已经将条形码的图片信息转换成了二进制的数组。按照条形码的编码规则,整个数组包括起始符,结束符,中间分隔符,数据信息总共95位,前3位是起始符(010),446位为左侧数据,4651位为中间分隔符(01010),5192位为右侧数据,9395位为结束符(010)。
    程序清单:
    j=1, k=1
    for i=4:51 %从第四位开始跳过了起始符
    evrybar(k ,j)=bar(i) %每7位数字存到一行里
    j=j+1
    if j8 %判断是否存储了7位数字
    k=k+1
    j=1
    end
    end
    j=1, k=7
    for i=51:92 %从第51位开始跳过了中间分隔符
    evrybar(k ,j)=bar(i)
    j=j+1
    if j
    8
    k=k+1
    j=1
    end
    end
    这样我们就能把每一个数字的逻辑值存到数组evrybar中。

       数组evrybar中每一行表示一位数字的逻辑值,例如第一位数字的逻辑值为1110100。接下来的任务就是判别数字了,取出数组evrybar中的一行,与数据库中的数据做比较,相同时返回相应的数字。注意在判别左侧数字时,因为左侧数字存在A、B两种编码方式,所以还要创建一个存储编码方式的数组barab。如果A类编码把数组barab相应的位置设置为1,B类编码则设置为0。这样我们就能通过数组barab来判断前置字符了。相应程序见附录。
    

    1.3.7校验输出结果
    从代码位置序号2开始,所有偶数位的数字代码求和为a。 将上步中的a乘以3为a。从代码位置序号3开始,所有奇数位的数字代码求和为b。将a和b相加为c。取c的个位数d。用10减去d即为校验位数值。
    例:234235654652的校验码的计算如表4-1。
    表4-1 校验码计算示意表
    代码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1
    数字码 2 3 4 2 3 5 6 5 4 6 5 2 ×
    步骤1:3+2+5+5+6+2=23
    步骤2:23*3=69
    步骤3:2+4+3+5+4+5=23
    步骤4:69+23=92
    步骤5:10-2=8
    步骤6:校验码为8
    1.4 主程序执行结果
    图4-9是程序运行后输出的结果,与条形码上的数字相同。准确判断出了条形码的数字,达到了预期的效果。运行效果图

    展开全文
  • 调用方法,面单图片条形码识别 C# asp.net bll,识别率很高 string[] strArray = OnBarcode.Barcode.BarcodeScanner.BarcodeScanner.Scan("图片地址", OnBarcode.Barcode.BarcodeScanner.BarcodeType.Code128);
  • 基于MATLAB的条形码识别程序 软件平台: MATLAB2018(a) 条形码类别:EAN13码 部分程序: clc;clear; close all; Image=imread(‘2.jpg’); %读取图片 % imshow(Image); %显示原图 photo=rgb2gray(Image); %灰度...

    基于MATLAB的条形码识别程序

    软件平台: MATLAB2018(a)
    条形码类别:EAN13码
    部分程序:
    %%%%%%%%%%%像形态学运算%%%%%%%%%%%%%%%
    clc;clear;
    [filename,pathname]=uigetfile(’.jpg’,‘选择一维条码图片’);
    I1=imread(filename); %读取图片
    subplot(331);imshow(I1);title(‘原始图’);
    I = rgb2gray(I1); %转换为灰度图像
    div=graythresh(I);
    I = im2bw(I,div1.27); %二值化处理;1
    subplot(332);imshow(I);title(‘二值图’);
    bw = edge(I,‘sobel’,‘horizontal’);
    [m,n]=size(bw);
    S=round(sqrt(m^2 + n^2));%S可以去到的最大值
    ma = 180;
    md = S;
    r=zeros(md,ma);
    c=0;
    for i=1:m
    for j=1:n
    if bw(i,j)==1
    for k=1:ma
    ru=round(abs(i
    cos(k3.14/180) + jsin(k*3.14/180)));
    r(ru+1,k)=r(ru+1,k)+1; %用来记录交点数值和角度
    end
    end
    end
    end
    [m,n]=size®;
    for i=1:m
    for j=1:n
    if r(i,j)>r(1,1)
    r(1,1) = r(i,j);
    c=j; %得到最大值的交点的角度值
    end
    end
    end
    if c<=90
    rot=-c;
    else
    rot=180-c;
    end
    pic=imrotate(I,rot,‘crop’);
    % pic=medfilt2(pic,[3,3]); %进行中值滤波
    subplot(333),imshow(pic);title(‘矫正图’);

    I2=imcomplement(pic);
    figure(5);imshow(I2);title(‘取反’);
    se = strel(‘rectangle’,[100 100]);%设置结构元素对象
    I3 = imdilate(I2,se); %4.膨胀
    figure(2);imshow(I3);title(‘膨胀’);
    se = strel(‘rectangle’,[55,7]);
    bi=strel(‘rectangle’,[12 12]);
    I4 = imclose(I3,bi);
    figure(3);imshow(I4);title(‘闭运算’);
    I5 = bwareaopen(I4,2000); %6.擦除
    %%%%%%%%%翻译条形码%%%%%%%%%%%%%%
    flag0=0;%作为标识符,将样条交替翻译成1或者0
    for j=4:56
    if n4 %四个值表示一位数
    n=0;
    end
    if d(j)<0.5r(i) %小于0.5舍去
    return;
    elseif d(j)<1.5
    r(i)&&d(j)>0.5*r(i)%0.5~1.5记为1个值
    if flag0
    0
    bs(j1)=“0”;%对于的被译码
    else
    bs(j1)=“1”;
    end
    j1=j1+1;
    elseif (d(j)>=1.5r(i))&&(d(j)<2.5r(i))%1.5~2.5记为2个值
    if flag00
    bs(j1)=“00”;
    else
    bs(j1)=“11”;
    end
    j1=j1+1;
    elseif (d(j)>=2.5r(i))&&(d(j)❤️.5r(i))%2.5~3.5记为3个值
    if flag0
    0
    bs(j1)=“000”;
    else
    bs(j1)=“111”;
    end
    j1=j1+1;
    elseif (d(j)>=3.5r(i))&&(d(j)<4.5r(i))%3.5~4.5记为4个值
    if flag00
    bs(j1)=“0000”;
    else
    bs(j1)=“1111”;
    end
    j1=j1+1;
    else
    return ;
    end
    n=n+1;
    if flag0
    0
    flag0=1;
    else
    flag0=0;
    end
    end
    %RAN13码编码规则
    %A类编码
    A=[“0001101”;“0011001”;“0010011”;“0111101”;“0100011”;“0110001”;“0101111”;“0111011”;“0110111”;“0001011”;
    “0100111”;“0110011”;“0011011”;“0100001”;“0011101”;“0111001”;“0000101”;“0010001”;“0001001”;“0010111”];
    %B类编码
    B=[“0100111”;“0110011”;“0011011”;“0100001”;“0011101”;“0111001”;“0000101”;“0010001”;“0001001”;“0010111”];
    fp=[1,0,0,0,0,1,1]; % 6 对应的编码规则
    %右侧编码
    C=[“1110010”;“1100110”;“1101100”;“1000010”;“1011100”;“1001110”;“1010000”;“1000100”;“1001000”;“1110100”];

    运行结果:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    察看全部程序详情+WX: w15136355113 报名来意

    报价RMB100,包教包会。

    展开全文
  • 前几天有个网友留言说如何对快递单的照片进行数字重命名,有没有高效的方式 这次我们写出第二种方案,【 请务必看完再使用软件 】 ...我们就用Code128的示例来说明,怎么去识别条形码中的数字,来改这个图片 这里要

    前几天有个网友留言说如何对快递单的照片进行数字重命名,有没有高效的方式

    这次我们写出第二种方案,【 请务必看完再使用软件 】

    以前我们写过一篇文章如何批量识别图片里的文字精准判断位置重命名

    方案一:【批量识别图片部分区域的文字改文件名

    方案二:就是如何去读取图片上的条码来进行重命名,方案如下:

    首先分析条形码的类型

    主要是:EAN-13、128,CODE128,39等等,今天先将条形码,二维码就先放一边

    我们就用Code128的示例来说明,怎么去识别条形码中的数字,来改这个图片

    这里要用到一个核心识别引擎Zbar的识别方法

    我们看到文件夹内有很多条形码,还有二维码,还有张快递单号

    下面我们就直接用到今天的条形码识别工具

    第一步:导入图片(支持单个文件、文件夹、文件夹含子文件夹)简单预览下图片是否导入正确

    第二步:选择上方一键识别的按钮,条形码会自动识别,处理文件

    从右边日志看到我们处理的日期、还有图片路径、还有条形码的文本、最后状态是否完成

    最后看一下文件夹的文件名的状态,所有的条形码都已经重命名,那张快递单号也被重命名了

    二维码不属于条形码识别的范畴,最后被归纳到另外一个文件夹内

    保存出识别不了的图片,便于大家整理,提高工作效率

    谢谢大家的支持,最后软件下载地址:

    CSDN赞助下载地址https://download.csdn.net/download/bbyn1314/12413184

    百度网盘下载地址:链接:https://pan.baidu.com/s/1zIzGB55PO9h5_xECs4U5YQ 提取码:fvjc 
     

    展开全文
  • 基于MATLAB的条形码识别系统

    千次阅读 2020-12-30 19:41:03
    1.1 应用MATLAB识别条形码总体设计本设计为基于MATLAB的条形码识别系统,带有一个GUI界面。1.1.1 程序总体设计思路在上节中我们简单的介绍了MATLAB的发展以及优点。在以后的章节中将阐述如何应用MATLAB编程实现对...

    1.1 应用MATLAB识别条形码总体设计

    本设计为基于MATLAB的条形码识别系统,带有一个GUI界面。

    资源链接

    https://gitee.com/chending006/tiaoxingmaicon-default.png?t=LA92https://gitee.com/chending006/tiaoxingma

    v2-692602333895dd3a2c183586b0c6171f_b.jpg

    1.1.1 程序总体设计思路

    在上节中我们简单的介绍了MATLAB的发展以及优点。在以后的章节中将阐述如何应用MATLAB编程实现对条形码的识别。在这一节中将主要介绍编程的总体思路。

    首先将含有条形码信息的图片读入到MATLAB中去,这个图片将以矩阵的形式存储在MATLAB中。这样,我们就能通过对矩阵的运算来实现对图片的处理。由于条形码一般都是黑白的,这样我们的第一步就是要把图片行二值化处理,用于去除那些不需要的细节。然后就要确定条形码所在的位置。这一步至关重要,如果定位不准确,我们就不能获取条形码所有的信息,以至于不能准确的识别。找到条形码准确位置后。就要对条形码信息提取,然后在按照比例将提取到的条形码信息转换成标准模块组成的条形码。最后通过相应的译码得到条形码中的数字,判别是否正确后输出,这样就完成了条形码识别的整个过程。

    v2-8f6c25d92dadffa6a9d2cf54919798cd_b.jpg

    图像处理的结果

    1.1.2 程序总体设计流程图

    主程序的流程图可以用图4-1来表示。

    效验

    输出条码

    结束

    转换成标准模块的条码

    读入条码中的第n行

    提取条码信息

    译码

    开始

    读入图片

    二值化处理

    定位条形码

    n加1

    图4-1主程序流程图

    1.3 各部分子程序说明

    上一节中我们分析了条形码识别的主体设计思路,在本节中我们将介绍程序各部分的作用以及实现方法。

    1.3.1 读入图片并二值化处理

    在这个步骤中,我们的主要任务是把含有条形码信息的图片文件放到MATLAB的工作区中去。当图片经过imread命令后,MATLAB会给图片开辟一个存储空间,把图片各像素点的值储存到一个矩阵中。读入图片格式一般都是 .jpg, . bmp,等格式,这样格式的图片每一个点都有其相应的R、G、B值,这不仅增大了MATLAB的运算量,而且还大大降低了识别的准确性。

    这就要求我们先对图像进行二值化处理。因为条形码在正常情况下是黑白的。这种方法可以去除与条形码不相关的信息,这些信息对条形码的识别是不起作用的。这样既可以提高效率,又可以提高准确性。

    图4-2和图4-3表示了二值化前后两个图像的对比。通过对比我们发现,二值化后图像更加简洁,我们需要的条形码符号更加清晰,容易进行识别。这也为我们以后的识别工作做了很好的铺垫。

    1.3.2条形码的定位

    上一个过程结束后,存储在MATLAB中的信息只有‘0’和‘1’,其中图像中黑色的部分用‘0’表示,白色部分用‘1’表示。

    v2-ee90ac30d041ecc73e99af5697c6c0d9_b.jpg

    v2-534def0270b0ae1961b2db6183c80b18_b.jpg

    图4-2 二值化前的图片 图4-3 二值化后的图片

    所谓条形码的定位就是找到条形码的确切位置,这样我们才能够到相应位置去提取条形码信息。由于条形码的前后都有9个模块的空白区,这些知识我们在第二章中我们已经做了详细的介绍。所以我们可以通过条形码前面的空白区来定位条形码,如果我们找到条形码前面空白区也就完成了对条形码的定位。

    假设我们定义条形码中每个模块所占的像素数为4,那么条形码空白区在水平方向上总共占的像素数为36。在竖直方向上每个条形码的长度都是不同的,但大约都是水平宽度的4~5倍。考虑到边缘的噪声问题。我们选取了一个120×30的单位矩阵作为空白区域的特征矩阵。接下来,对整幅图像进行逐点扫描。扫描到一点时,以这一点为原点与特征矩阵比较,如果相等,程序则返回该点的值,这一点就是条形码左上角的点,如果不相等,继续扫描下一点。其主要的程序流程图如图4-4所示。经过提取条形码如图4-5所示条形码被置于整个图片左上方。

    开始

    定义空白区特征矩阵

    逐点进行

    扫描

    是否与特征矩阵相同

    返回该点值

    Y

    N

    图4-4 定位条形码流程图

    v2-1198815e6ad3744a54a5d42ad8c5bdf9_b.jpg

    图4-5 提取后的条形码

    1.3.3条形码信息的提取

    找到条形码的起始坐标后,我们就能对条形码的信息进行提取了。首先以条形码的起始坐标为依据提取一行含有条形码信息的数据。通过对起始符,结束符,以及左右空白区的判断,我们可以准确的找到条形码中间的数据区域。接下来我们将对条形码的数据区域进行进一步的处理,把条形码转换成标准模块的条形码,也就是每个模块都是有‘0’或‘1’表示。

    1.3.4条形码单元的判断

    条形码的单元指的是我们看到的条形码中的条和空,每一个单元都是有1~4个模块组成的。本步的主要工作是判断条形码中每个单元的数据(0或1)和其所占的像素数。其主要程序的流程图如图4-6所示。

    1.3.5条形码模块的识别

    模块是组成条形码最基本的单位,在识别的过程中识别出每个模块的值我们就能对条形码进行判别了。上一步我们得到了条形码每个单元的数据以及宽度(所占像素数),把所有单元的像素数相加就可以得出整个条形码所占的总像素数了。在第二章中,我们在介绍了EAN-13码的基本构成,不包括条形码的左右空白区总空有95个模块组成。这样就可以知道每个模块所占的像素数了。进而可以计算出每个单元的模块数。主要程序如下:

    N

    Y

    N

    Y

    开始

    输入含有条形码信息的一行C

    i是否小于最大点

    该点c(i)值是否与下点相同

    单元长度m加1

    m重新记录

    指针j加1

    Barlong(j)=m

    Bardata(j)=c(i)

    结束

    图4-6 单元判别流程图

    完成上述两个步骤后我们已经将各个模块单元化了。也就是说每个模块都是由一个单位的0或1表示的,转换成了条形码的逻辑值。经过处理后条形码的图像如图4-7所示。我们可以把这幅图像与图4-5做一比较,条形码明显清晰。

    v2-4743a7329fb638050561a48953a37cfc_b.jpg

    图4-7 经过整形后单位模块的条形码

    1.3.6条形码数字判别

    到现在为止,我们已经将条形码的图片信息转换成了二进制的数组。按照条形码的编码规则,整个数组包括起始符,结束符,中间分隔符,数据信息总共95位,前3位是起始符(010),4~46位为左侧数据,46~51位为中间分隔符(01010),51~92位为右侧数据,93~95位为结束符(010)。

    这样我们就能把每一个数字的逻辑值存到数组evrybar中。查看evrybar中的截图为图4-8。

    v2-39c33376fd29af473b5cc178fbb4875e_b.jpg

    图4-8 数组evrybar存储的数据

    数组evrybar中每一行表示一位数字的逻辑值,例如第一位数字的逻辑值为1110100。接下来的任务就是判别数字了,取出数组evrybar中的一行,与数据库中的数据做比较,相同时返回相应的数字。注意在判别左侧数字时,因为左侧数字存在A、B两种编码方式,所以还要创建一个存储编码方式的数组barab。如果A类编码把数组barab相应的位置设置为1,B类编码则设置为0。这样我们就能通过数组barab来判断前置字符了。相应程序见附录。

    1.3.7校验输出结果

    从代码位置序号2开始,所有偶数位的数字代码求和为a。 将上步中的a乘以3为a。从代码位置序号3开始,所有奇数位的数字代码求和为b。将a和b相加为c。取c的个位数d。用10减去d即为校验位数值。

    例:234235654652的校验码的计算如表4-1。

    表4-1 校验码计算示意表

    代码位置序号13121110987654321
    数字码234235654652×

    步骤1:3+2+5+5+6+2=23

    步骤2:23*3=69

    步骤3:2+4+3+5+4+5=23

    步骤4:69+23=92

    步骤5:10-2=8

    步骤6:校验码为8

    1.4 主程序执行结果

    图4-9是程序运行后输出的结果,与条形码上的数字相同。准确判断出了条形码的数字,达到了预期的效果。

    v2-630ef06a06d4a22cb1e0d3b4ac003537_b.jpg

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,626
精华内容 7,450
关键字:

条码识别