该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如何通过读出条码的码字信息,如

这样一个显示结果。谢谢了

%function code =barcode(pic) %条形码识别

close all

check_left =[13,25,19,61,35,49,47,59,55,11;... %左边数据编码,奇

39,51,27,33,29,57, 5,17, 9,23]; %左边数据编码,偶

check_right =[114,102,108,66,92,78,80,68,72,116]; %右边数据编码

first_num = [31,20,18,17,12,6,3,10,9,5]; %第一位数据编码

bar =imread('008.bmp'); %读输入条形码图片

bar_Gray =rgb2gray(bar); %将RGB图片转换灰度图

figure(1)

imshow(bar)

title('条形码图')

figure(2)

subplot(121),imshow(bar_Gray),title('灰度图')

subplot(122),imhist(bar_Gray),title('灰度图直方图')

bar_Gray=imnoise(bar_Gray, 'salt & pepper', 0.02);

figure(3)

subplot(121);imshow(bar); title('原图像');

subplot(122);imshow(bar_Gray); title('添加椒盐噪声图像');

bar_Gray =medfilt2(bar_Gray); %进行3*3模板中值滤波

figure(4)

imshow(bar_Gray)

title('中值滤波之后图片')

%for i=1:m %对图像进行二值化处理

%for j=1:n

% if bar_Gray(i,j)>150 %选择适当的阈值进行二值化处理

% bar_10(i,j) = 1;

%else

% bar_10(i,j) = 0;

%end

%end

%end

[a_hist x] =imhist(bar_Gray);

hist_max = [];

ifa_hist(1)>a_hist(2)

hist_max = [hist_max 1];

end

x = max(x);

for i=2:x

if a_hist(i)>a_hist(i-1) &&a_hist(i)>a_hist(i+1)

hist_max = [hist_max i];

end

end

ifa_hist(x)

hist_max = [hist_max x+1];

end

[m,n] =size(hist_max);

k = 0;

max_1 = 0;

max_2 = 0;

for i=1:n

if k

k = a_hist(hist_max(i));

max_1 = hist_max(i);

end

end

temp =a_hist(max_1);

a_hist(max_1) = 0;

k = 0;

for i=1:n

if k

k = a_hist(hist_max(i));

max_2 = hist_max(i);

end

end

a_hist(max_1) =temp;

if max_1>max_2

k = max_1;

max_1 = max_2;

max_2 = k;

end

T = max_1;

k = a_hist(max_1);

for i=max_1:max_2

if k>a_hist(i)

k = a_hist(i);

T = i;

end

end

[m,n] = size(bar_Gray);%求灰度图的大小

for i=1:m %对图像进行二值化处理

for j=1:n

if bar_Gray(i,j)>T %选择适当的阈值进行二值化处理

bar_10(i,j) = 1;

else

bar_10(i,j) = 0;

end

end

end

figure(5)

imshow(bar_10);

title('二值化图')

l = 0; %检测59根条形码

for i=1:m

k = 1;

l = l+1;

for j=1:n-1

if bar_10(i,j)~=bar_10(i,j+1) %比较同一行相邻两点的颜色是否一致

%bar_x(l,k) = i;

bar_y(l,k) = j; %记录转折点的纵坐标

k = k+1; %准备记录下一个数据点

end

if k>61 %点数大于60,该行应该删掉

l = l-1;

break

end

end

if k<61 %点数小于60,该行应该删掉

l = l-1;

end

end

[m,n] =size(bar_y);

if m<=1 %查看条形码是否有效

code = '0';

fprintf(1,'GameOver!\n');

return

end

for i=1:m %计算每根条形码的宽度

for j=1:n-1

bar_num(i,j) = bar_y(i,j+1) -bar_y(i,j);

if bar_num(i,j)<0

bar_num(i,j) = 0;

end

end

end

bar_sum =sum(bar_num)/m; %求每根条形码宽度的平均值

k = 0;

for i=1:59 %计算59根条形码的总宽度

k = k + bar_sum(i);

end

k = k/95; %计算单位条形码的宽度

for i=1:59 %计算每根条形码所占位数

bar_int(i) = round(bar_sum(i)/k);

end

k = 1;

for i=1:59 %将条形码转换成二进制数

if rem(i,2)

for j=1:bar_int(i) %黑色条用1表示

bar_01(k) = 1;

k = k+1;

end

else

for j=1:bar_int(i) %白色条用0表示

bar_01(k) = 0;

k = k+1;

end

end

end

if((bar_01(1)&&~bar_01(2)&&bar_01(3))... %判断起始符是否正确

&&(~bar_01(46)&&bar_01(47)&&~bar_01(48)&&bar_01(49)&&~bar_01(50))... %判断中间分隔符是否正确

&&(bar_01(95)&&~bar_01(94)&&bar_01(93))) %判断终止符是否正确

l = 1;

for i=1:6 %将左侧42位二进制数转换为十进制数

bar_left(l) = 0;

for k=1:7

bar_left(l) =bar_left(l)+bar_01(7*(i-1)+k+3)*(2^(7-k));

end

l = l+1;

end

l = 1;

fori=1:6 %将右侧42位二进制数转换为十进制数

bar_right(l) = 0;

for k=1:7

bar_right(l) =bar_right(l)+bar_01(7*(i+6)+k+1)*(2^(7-k));

k = k-1;

end

l = l+1;

end

end

num_bar = '';

num_first = 0;

first = 2;

for i=1:6 %从左边数据编码表中查出条形码编码数字

for j=0:1

for k=0:9

if bar_left(i)==check_left(j+1,k+1)

num_bar = strcat(num_bar ,num2str(k));

switch first %记录左边数据的奇偶顺序

case 2

first = j;

break;

case 1

num_first = num_first +j*(2^(6-i));

break;

case 0

num_first = num_first +~j*(2^(6-i));

break;

otherwise

break;

end

end

end

end

end

for i=1:6 %从右边数据编码表中查出条形码编码数字

for j=0:9

if bar_right(i)==check_right(j+1)

num_bar = strcat(num_bar ,num2str(j));

end

end

end

for i=0:9 %从第一位数据编码表中查出第一位数字

if num_first==first_num(i+1)

num_bar = strcat(num2str(i) , num_bar);

break;

end

end

ifnumel(num_bar)~=13

fprintf(1,'Please Turn It Around!\n');

return

end

check_code = 0;

for i=1:12 %计算校验码

if rem(i,2)

check_code = check_code +str2num(num_bar(i));

else

check_code = check_code +str2num(num_bar(i))*3;

end

end

check_code =rem(check_code,10);

if check_code>0

check_code = 10 - check_code;

end

ifcheck_code==str2num(num_bar(13)) %判断校验码是否正确

disp('识别出的条形码:')

code = num_bar

else

fprintf(1,'Please Turn It Around!\n');

return

end

matlab一维图像程序,求大神指教啊!基于图像处理的一维条码识别(MATLAB程序)...相关推荐

  1. ceq c matlab,求一个函数MATLAB的编程,求大神指教。

    function f=myfun(x)f=x(1)+x(2)+81;end %%函数,其中x=x(1)y=x(2)function [c,ceq]=mycon(x)c(1)=100000-x(1)*x ...

  2. matlab求解复杂隐函数,MATLAB复杂隐函数求解!求大神指导!

    问题描述: MATLAB复杂隐函数求解!求大神指导! syms D1 D2 G1 G2 al E1 E2 Km w6 G1=10^(-5);G2=10^(-5); E1=2*(10^11);E2=2* ...

  3. Android App后台、锁屏运行,百度定位不实时定位。未解问题,求大神指教?

    细节描述: 功能需要实现:App 一直给后台上传经纬度.(正常运行,后台运行,锁屏运行) 问题描述:红米Note 5A. 在A点,App 锁屏,走到B 点,然而在A---B之间一直上传的是A点锁屏前的 ...

  4. php输出后以密文显示,加密解密,_求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢,加密解密 - phpStudy...

    求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢 求大神帮看一下,如何根据下面的程序,把明文生成密文谢谢 def parserLicense(self,encCode): data = base ...

  5. 如何修改matlab中的语句,求大神帮忙看一下这个语句怎么改!!!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 clc clear W=imread('e:\matlab\aaa\1.jpg'); imshow (W); I = rgb2gray(W); % 灰度处 ...

  6. 两相四线步进电机C语言程序,求大神帮忙看单片机控制两相四线步进电机的程序!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define uchar unsigned char #define uint unsigned int uchar code tim ...

  7. 做毕设途中遇到了问题,求大神指教。

    毕设我是用asp.net做一个求职招聘网站的,怎样实现求职者向公司投递简历这一步骤啊?然后公司对收到的简历进行面试邀请,这个怎么实现啊?好难啊,等待大神指导. 求代码,如果没代码求步骤!跪谢!

  8. 用matlab怎么画出y=sin(t)的导函数图像?用diff为什么一阶导函数会缩小100倍,二阶导函数会缩小1000倍。求大神指教

    t=0:0.01:2*pi; y=sin(t); plot(t,y) v=diff(y,1); plot(t(1:end-1),v) a=diff(y,2); plot(t(1:end-2),a)

  9. matlab 预测值一样,matlab BP神经网络建造如下,预测时,预测值反归一化报错,求大神指教!!!!!...

    data=xlsread('Book1.xlsx','sheet1');%读取表格中的数据 input=data(:,1:3);%将前三列作为输入 output=data(:,4:6);%后三列作为输 ...

  10. matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 E=[];a=0;b=0;c=0; for Zp=-50:2:50 for Xp=-200:2:200 for Yp=-200:2:200 P1_1=[c ...

最新文章

  1. Cookie和Session的区别与联系
  2. Mycat1.6之注解多租户
  3. STM32F1笔记(十)PWM
  4. iPhone X 刘海打理指北
  5. Log4j.properties的简单配置
  6. 利用mycat实现mysql数据库读写分离
  7. 直线和圆交点 halcon_人教版六年级上册数学第五单元《圆》5.1 圆的认识
  8. 如何在私有链实现分叉
  9. ServiceStack.Redis之IRedisClient(转载)
  10. SQL点点滴滴_常用函数
  11. 项目实战-1读取记事本中的文件,写入到slice切片中。
  12. android studio 软件使用 详细说明
  13. 网易2019校招笔试题-瞌睡
  14. Fluent动网格知识汇总
  15. wget无法批量下载气象数据的解决方案(Python、迅雷批量下载气象数据方法)
  16. 【Spring】IoC,DI,两种代理方式,AOP定义和使用
  17. 加拿大银行为加密货币公司开设保险箱
  18. 一个程序员竟然喜欢上了写诗
  19. 可视化界面 Sentinel 流控卫兵 限流 熔断 系统保护
  20. python视频教程哪个好-Python 基础视频教程那个好?

热门文章

  1. mysql触发器安全吗_猎八哥浅谈MYSQL触发器
  2. 使用visual studio2015 社区版开发office
  3. 7个实用的免费网站托管站点
  4. CE-FPN: Enhancing Channel Information for Object Detection
  5. Enhancing The Reliability of Out-of-distribution Image Detection in Neural Networks解读
  6. 写代码之外,如何再赚一份工资?
  7. 安卓手机里的“其他”为何占用如此多?我用adb+excel来处理
  8. 【好东西】ACM在线模版-f-zyj
  9. 微信公众平台测试号的申请与使用
  10. 炮兵阵地图文详解NOI2001/POJ1185(状态压缩)