• 大小: 26KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: Matlab
  • 标签: matlab  

资源简介

条形码识别,matlab代码 ,内负条形码,以及测试过,简单实用,便于作为课程设计等。

资源截图

代码片段和文件信息

clc;
close all;
%启动定时器,测试软件性能
[filenamefilepath]=uigetfile(‘*.jpg‘‘打开文件‘);%gui中打开文件
filep=strcat(filepathfilename);
%filep
Image=imread(filep);
tic;
%读取图像并二值化
% Image = imread(‘0081.jpg‘);
level = graythresh(Image);  %获取图像二值化的阈值
bw = im2bw(Imagelevel);    %二值化处理
imshow(bw);
t = 1;
p = 1;
[m n] = size(bw);
%初步计数黑白条的书目
q = round(m/2);
    for i=q
        for j=1:n-1
            if bw(ij)==0&&bw(ij+1)==1%颜色变化由黑色变成白色,黑条
                x(t) = j;
                 t = t+1;
            end
       
        end
    end


for i=q
    for j=1:n-1
        if bw(ij)==1&&bw(ij+1)==0 %颜色变化由白色变成黑色,白条
            y(p) = j;
             p = p+1;
        end
       
    end
end
pin = 0;
 while length(x)~=30||length(y)~=30
     %%等待提示信息
        if pin ==0
        display(‘正在扫码,请对准而条形码............‘);
        end
        pin = pin+1;
     %条形码有损坏是逐行扫描
       for pp=q:round(5*m/6)
           t=1;
           p=1;
            if length(x)==30&&length(y)==30 %通过判断黑白条数测试当前行有无算坏
                break;
            end
                for i=pp
                    for j=1:n-1
                        if bw(ij)==0&&bw(ij+1)==1
                            x(t) = j;
                            t = t+1;
                        end
                    end
                end
                for i=pp
                    for j=1:n-1
                        if bw(ij)==1&&bw(ij+1)==0
                            y(p) = j;
                            p = p+1;
                        end
       
                    end
                end
       end
 end 
 if length(x)~=30||length(y)~=30
     display(‘扫码错误!‘);
     return;
 end
 if i~=round(m/2)
     display(‘该条形码已受损,但仍然可以正常扫描‘);
 end
%计算每个条—空的宽度,利用所记录在xy数组中的坐标值,对应相减
 for ii=1:30
    if ii==1
        d(ii)=x(ii)-y(ii);      %计算第一个条的宽度
        d(ii+1)=y(ii+1)-x(ii);  %计算第一个空的宽度
    end
     if ii>1
         if ii>1&&ii<30
        d(2*ii) = y(ii+1)-x(ii); %分别计算第2~29个空的宽度
        d(2*ii-1)=x(ii)-y(ii);   %分别计算第2~29个条的宽度
     elseif ii==30
         d(ii*2-1)=x(ii)-y(ii);   %总共有59个条-空,单独计算第三十个条的宽度
         end
     end    
end


j  = 3;
for i=1:6               
    r(i)=(d(j+1)+d(j+2)+d(j+3)+d(j+4))/7;       %计算左边六个字的基准码的宽度
end
j=32;
for i=7:12
    r(i)=(d(j+1)+d(j+2)+d(j+3)+d(j+4))/7;       %计算右边五个字的基准码的宽度
end
n=0;%四字计数
i=1;
j1=1;
j=4;%跳过起始符,从左边第一个开始读码
flag0=0;%作为标识符,将样条交替翻译成1或者0
while j<=56
    if n==4
        n=0;
        i=i+1;
    end
    if d(j)<0.5*r(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.5*r(i))&&(d(j)<2.5*r(i))%1.5~2.5记为2个值
        if flag0==0
            bs(j1)={‘00‘};
        else
            bs(j1)={‘11‘};
        end
       j1=j1+1;
    elseif (d(j)>=2.5*r(i))&&(d(j)<3.5*r(i))%2.5~3.5记为3个值
       if flag0==0
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6420  2018-07-04 15:16  条形码识别\Shibie.m

     文件      24331  2018-07-04 14:17  条形码识别\test.jpg

     目录          0  2018-07-04 15:28  条形码识别

----------- ---------  ---------- -----  ----

                30751                    3


评论

共有 条评论