基于MATLAB的条形码识别程序

基于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”];

运行结果:
基于MATLAB的条形码识别程序_第1张图片

基于MATLAB的条形码识别程序_第2张图片
基于MATLAB的条形码识别程序_第3张图片
基于MATLAB的条形码识别程序_第4张图片

基于MATLAB的条形码识别程序_第5张图片

基于MATLAB的条形码识别程序_第6张图片

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

报价RMB100,包教包会。

你可能感兴趣的:(MATLAB,matlab,图像识别,图像处理,c语言)