資源簡介
條形碼識別,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
- 上一篇:關于matlab的100個問題
- 下一篇:matlab程序,實現車牌圖片的識別
評論
共有 條評論