一维条码是一种能用于信息编码和信息自动识别的标准符号,是由一组宽度不同的黑白符号按一定规则交替排列编码组成的图形符号可用于表示一定的信息。
它是对物品进行代号标识需要依赖数据库或通讯网络才能发挥最大的作用。常见的码制(条码符号类型)有EAN-13码,EAN-8码,UPC码,交叉25码。
EAN-13解码:
EAN-13码结构
解码流程:
一维条码解码matlab代码
function [code]=one_dimensional_codeself(img)
%% 图片的读取
f=imread(img);% read figure
g=rgb2gray(f); %turn to gray figure
figure(1);
imshow(g);title('原图像');
[M,N]=size(g);
%% 图片的处理
T=graythresh(g)*255; %get threshold
g= Thresholding(g,T); %二值化
%% 噪声过滤
g=medfilt2(g); %filter
figure(2);
imshow(g);title('滤波后的图像');
im_edge=edge(g,'canny'); %边缘检测
figure(3);
imshow(im_edge);title('边缘检测后的图像');
A=line_detection(im_edge);
g=~g; %黑白像素翻转
%% 图片旋转
g=imrotate(g,A*180/pi,'nearest'); %旋转图像
g=~g;
figure(4)
imshow(g);title('旋转后的图像1');
is=is_upsize(g); %判读是否是正向水平
if is==1
g=imrotate(g,180,'nearest');
end
figure(5)
imshow(g);title('旋转后的图像2');
bar_width=bar_width_F(g);%获取条空的宽度
decode=dedecode_f(bar_width);%条空换做0,1表示
%% 一维码破解
if check_1(decode)
code=decode_f(decode);
end
Thresholding.m