欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    matlab一维条形码码字识别程序(共10页).docx

    • 资源ID:14165015       资源大小:16.94KB        全文页数:10页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    matlab一维条形码码字识别程序(共10页).docx

    精选优质文档-倾情为你奉上close allI = imread('E:txm.jpg');J= rgb2gray(I);figure(1)imshow(J);title('灰度化图像 ');e1,e2=size(J);Im=imcrop(J,e2/2-200,e1/2-200,400,400);figure(2)subplot(1,2,1),imshow(Im)title('中心区域 ');subplot(1,2,2),imhist(Im)title('中心区域直方图');xa,ya=size(Im); b=double(Im); zd=double(max(Im) ; zx=double(min(Im) ; T=double(zd+zx)/2; count=double(0); while 1 count=count+1; S0=0.0; n0=0.0; S1=0.0; n1=0.0; for i=1:xafor j=1:yaif double(Im(i,j)>=TS1=S1+double(Im(i,j); n1=n1+1; else S0=S0+double(Im(i,j); n0=n0+1; end end end T0=S0/n0; T1=S1/n1; if abs(T-(T0+T1)/2)<0.1 break;elseT=(T0+T1)/2; end end countTK=find(J<T);J(K)=0;K=find(J>=T);J(K)=255;figure(3)imshow(J)title(' 图像二值化 ');B=medfilt2(J,5,1);figure(4)imshow(B)title('中值滤波后图像');y0,x0=size(B);BW = edge(B,'log'); figure(5);imshow(BW);title('边缘检测图像')%function code = barcode(pic) %条形码识别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('E:txm.jpg');%读输入条形码图片bar_Gray = rgb2gray(bar);%将RGB图片转换灰度图a_hist x = imhist(bar_Gray);hist_max = ;if a_hist(1)>a_hist(2)hist_max = hist_max 1;endx = max(x);for i=2:xif a_hist(i)>a_hist(i-1) && a_hist(i)>a_hist(i+1)hist_max = hist_max i;endendif a_hist(x)<a_hist(x+1)hist_max = hist_max x+1;endm,n = size(hist_max);k = 0;max_1 = 0;max_2 = 0;for i=1:nif k<a_hist(hist_max(i)k = a_hist(hist_max(i);max_1 = hist_max(i);end endtemp = a_hist(max_1);a_hist(max_1) = 0;k = 0;for i=1:nif k<a_hist(hist_max(i)k = a_hist(hist_max(i);max_2 = hist_max(i);endenda_hist(max_1) = temp;if max_1>max_2k = max_1;max_1 = max_2;max_2 = k;endT = max_1;k = a_hist(max_1);for i=max_1:max_2if k>a_hist(i)k = a_hist(i);T = i;endendm,n = size(bar_Gray); %求灰度图的大小for i=1:m %对图像进行二值化处理for j=1:nif bar_Gray(i,j)>T%选择适当的阈值进行二值化处理bar_10(i,j) = 1;elsebar_10(i,j) = 0;endendend%imshow(bar_10);l = 0;%检测59根条形码for i=1:mk = 1;l = l+1;for j=1:n-1if bar_10(i,j)=bar_10(i,j+1)%比较同一行相邻两点的颜色是否一致%bar_x(l,k) = i;bar_y(l,k) = j; %记录转折点的纵坐标k = k+1;%准备记录下一个数据点endif k>61 %点数大于60,该行应该删掉l = l-1;breakendendif k<61 %点数小于60,该行应该删掉l = l-1;endendm,n = size(bar_y);if m<=1 %查看条形码是否有效code = '0'fprintf(1,'GameOver!n');returnendfor i=1:m%计算每根条形码的宽度for j=1:n-1bar_num(i,j) = bar_y(i,j+1) - bar_y(i,j);if bar_num(i,j)<0bar_num(i,j) = 0;endendendbar_sum = sum(bar_num)/m;%求每根条形码宽度的平均值k = 0;for i=1:59%计算59根条形码的总宽度k = k + bar_sum(i);endk = k/95;%计算单位条形码的宽度for i=1:59%计算每根条形码所占位数bar_int(i) = round(bar_sum(i)/k);endk = 1;for i=1:59%将条形码转换成二进制数if rem(i,2)for j=1:bar_int(i)%黑色条用1表示bar_01(k) = 1;k = k+1;endelsefor j=1:bar_int(i) %白色条用0表示bar_01(k) = 0;k = k+1;endendendif (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:7bar_left(l) = bar_left(l)+bar_01(7*(i-1)+k+3)*(2(7-k);endl = l+1;endl = 1;for i=1:6 %将右侧42位二进制数转换为十进制数bar_right(l) = 0;for k=1:7bar_right(l) = bar_right(l)+bar_01(7*(i+6)+k+1)*(2(7-k);k = k-1;endl = l+1;endendnum_bar = ''num_first = 0;first = 2;for i=1:6%从左边数据编码表中查出条形码编码数字for j=0:1for k=0:9if bar_left(i)=check_left(j+1,k+1)num_bar = strcat(num_bar , num2str(k);switch first%记录左边数据的奇偶顺序case 2first = j;break;case 1num_first = num_first + j*(2(6-i);break;case 0num_first = num_first + j*(2(6-i);break;otherwisebreak;endendendendendfor i=1:6%从右边数据编码表中查出条形码编码数字for j=0:9if bar_right(i)=check_right(j+1)num_bar = strcat(num_bar , num2str(j);endendendfor i=0:9%从第一位数据编码表中查出第一位数字if num_first=first_num(i+1)num_bar = strcat(num2str(i) , num_bar);break;endendif numel(num_bar)=13fprintf(1,'Please Turn It Around!n');returnendcheck_code = 0;for i=1:12 %计算校验码if rem(i,2)check_code = check_code + str2double(num_bar(i);elsecheck_code = check_code + str2double(num_bar(i)*3;endendcheck_code = rem(check_code,10);if check_code>0check_code = 10 - check_code;endif check_code=str2double(num_bar(13) %判断校验码是否正确code = num_bar;elsefprintf(1,'Please Turn It Around!n');returnend专心-专注-专业

    注意事项

    本文(matlab一维条形码码字识别程序(共10页).docx)为本站会员(飞****2)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开