答辩-二维码生成与识别系统的设计与实现----解码器的设计与实现共18页文档
手机智能扫描解码应用的设计与实现
现代经济信息手机智能扫描解码应用的设计与实现李瑞娥 沈丹菁 陈 鑫 邰昌建 东南大学成贤学院摘要:在研究Android识别技术以及二维码的基础上,设计并实现了在Android平台下的智能手机的二维码扫描识别功能系统。
介绍了二维码在智能手机终端扫描识别功能的详细设计,以及调用二维码对应的数据的功能。
关键词:Android;二维码;二维码扫描;二维码识别中图分类号:TP311.52 文献识别码:A 文章编号:1001-828X(2016)007-000382-02引言随着科技的不断发展条码技术得到了越来越广泛的应用。
条码技术是物流管理现代化的重要技术手段。
如今Android智能手机的普遍使用以及手机应用程序的大量涌现,使得条码技术持续发展。
虽然一维的条形码提高了信息录入的速度,而且出错几率小。
但是一维的条形码只能包含数字和字母,不能够存储记录大量数据信息,受损后便不能够识别。
于是二维码便随之发展起来。
作为一种新型的条码技术,二维码是通过利用构成计算机内部逻辑基础的“0”、“1”比特流的概念来实现代码的编制,同时使用与二进制相对应的黑白相间的几何图片记录数据信息,通过扫描设备等自动处理数据信息。
二维码编码密度高,数据容量大;编码范围也不在局限于数字和字母;有纠错功能;译码出错几率小;防伪性、保密性、持久性好;制作成本低,容易生成。
二维条码技术的推广,将会促进我国信息产业的发展和现代化经济建设的发展。
一、条码识别系统的设计1.系统框架设计本文的设计是在Android平台下的智能手机的二维码扫描识别功能系统。
本系统主要框架结构为二维码的识别。
通过智能手机端的摄像头对二维码进行扫描,实现对二维码的识别。
具体操作是把扫描的二维码送到后台进行解析,如果解析成功,就停止扫描。
如果解析不成功,对二维码进行再扫描采集图像,再解析,如此循环,直到能够识别图像为止。
2.二维码的识别设计二维码的识别主要是通过调用摄像头,启动多线程,快速回调摄像头。
二维码解码模块的设计与实现
中山大学数据科学与计算机学院物联网技术实验报告二维码解码模块的设计与实现小组成员:指导教师:目录第1章二维码解码模块的设计概要 (1)1.1 二维码解码模块的设计概述 (1)1.2 二维码解码模块的设计安排 (1)第2章二维码解码模块的详细设计过程 (1)第3章二维码解码模块的功能测试 (5)3.1原本竖直放置的条码调整为水平方向 (5)3.2 屏幕上描绘扫描线 (5)3.3 旋转变换条码并用邻近插值消除毛刺 (6)3.4寻找条码端点从背景中分离出来 (7)第4章二维码解码模块的功能创新 (7)4.1可以调用系统内部函数来矫正条码方向,更为简便 (7)4.2 使用int16()标注有符号,占用2个字节,向无穷大方向取整,防止图像过大超出索引范围 (7)第5章二维码解码模块的项目总结 (7)第1章二维码解码模块的设计概要1.1二维码解码模块的设计概述在多数情况下,条码图像由于各种原因和其他图像混合在一起,或本身出现一些污渍,破损等情况。
因此在解码之前必须对采集到的图像进行预处理,过滤掉一些不必要的信息,消除图像中的噪声影响,检测定位出条码。
解决生活中出现的实际问题,来发挥出该项技术的便捷性。
1.2二维码解码模块的设计安排掌握OSTU算法和线扫描法利用腐蚀和膨胀定位复杂背景下的二维码Hough变换检测条码边线和顶点实现投影矫正几何形变的二维码第2章二维码解码模块的详细设计过程判断条码是否水平放置,并将其调整到合适方位线性扫描图像来寻找左侧边线,得到条码偏移角度线扫面取斜率中点,通过几何变换把条码旋转至正确位置旋转后进行横向纵向插值来消除毛刺通过寻找上下边线来确定左右角顶点,然后切割出条码范围第3章二维码解码模块的功能测试3.1原本竖直放置的条码调整为水平方向3.2 屏幕上描绘扫描线3.3 旋转变换条码并用邻近插值消除毛刺3.4寻找条码端点从背景中分离出来第4章二维码解码模块的功能创新4.1可以调用系统内部函数来矫正条码方向,更为简便4.2使用int16()标注有符号,占用2个字节,向无穷大方向取整,防止图像过大超出索引范围第5章二维码解码模块的项目总结对以上过程进行一个项目总结,表达自己对整个项目的认识;此外,描述自己的心得收获、开发过程中遇到的问题以及如何解决的等。
毕业设计二维码生成与识别系统的设计与实现
毕业设计二维码生成与识别系统的设计与实现毕业设计:二维码生成与识别系统的设计与实现随着科技的快速发展,二维码技术已经广泛应用于生活的各个领域。
为了更好地研究和应用二维码技术,本文将设计并实现一个二维码生成与识别系统。
本系统将提供二维码生成、存储、识别等功能,并针对不同的应用场景进行优化。
在系统开发初期,需要对目标用户的需求进行深入分析。
本系统的用户主要包括学生、教师和企业管理者。
学生和教师需要使用二维码进行个人信息存储、考试签到等操作;企业管理者需要使用二维码进行产品信息跟踪、员工信息管理等操作。
因此,系统应具备以下特点:易用性:系统界面应简洁明了,操作应简单易懂。
高效性:系统应具备高效的二维码生成与识别能力。
安全性:系统应保证用户数据的安全性,避免信息泄露。
可扩展性:系统应具备良好的可扩展性,方便未来功能扩展和升级。
本系统需要存储用户信息、二维码信息等数据。
为了确保数据的安全性和完整性,选用关系型数据库MySQL进行数据存储。
数据库主要包括用户表、二维码表等,每个表包含相应的字段,如用户ID、用户姓名、二维码ID、二维码内容等。
本系统采用B/S架构,用户可以通过浏览器访问系统。
系统主要包括用户接口、业务逻辑层和数据库接口三个部分。
用户接口负责与用户进行交互,业务逻辑层负责处理用户请求并调用数据库接口进行数据存储和读取,数据库接口负责与数据库进行交互。
(1)用户注册模块:用户可以通过该模块进行注册,填写个人信息并生成对应的二维码。
(2)用户登录模块:用户可以通过该模块进行登录,验证个人信息并进入系统主页面。
(3)二维码生成模块:用户可以在主页面选择生成二维码,填写相关信息并生成对应的二维码图片。
(4)二维码识别模块:用户可以通过该模块进行二维码扫描,识别二维码内容并返回相应的信息。
(5)数据管理模块:企业管理者可以通过该模块进行数据管理,查看用户信息和二维码信息,并对异常数据进行处理。
本系统使用Python中的qrcode库进行二维码生成。
二维码生成与扫描识别系统设计
二维码生成与扫描识别系统设计
一、介绍
二、功能要求
3.信息显示:系统能够将扫描获取的信息显示在用户界面上,用户可以根据需要进行保存、分享等操作。
三、系统设计
1.技术选型:
- 后端开发:使用Java进行后端开发,选用Spring Boot框架。
- 前端开发:采用HTML、CSS和JavaScript开发前端界面,借助jQuery等工具库简化开发。
2.系统架构图
3.后端实现:
-设计表结构:
-实现接口:
-获取扫描记录接口:根据用户ID获取用户的扫描记录,返回给前端界面进行显示。
-其他管理接口:如用户注册、登录、修改密码等。
-安全性考虑:
- 用户密码要进行加密存储,可以使用bcrypt等加密算法。
- 接口要进行身份验证,可以使用JWT(JSON Web Token)或使用Spring Security等框架进行授权验证。
4.前端实现:
-设计界面:
-用户注册界面:包括用户名、密码等输入框和注册按钮。
-用户登录界面:包括用户名、密码等输入框和登录按钮。
-扫描记录界面:显示用户的扫描记录列表。
-其他界面:如修改密码、个人信息等。
-实现交互:
- 使用JavaScript和jQuery等工具库实现前端与后端的交互,通过Ajax技术发送请求和接收响应。
-使用HTML和CSS实现用户界面的布局和样式。
五、总结。
基于Android的二维码的生成与识别系统的设计与实现
基于Android的二维码的生成与识别系统的设计与实现作者:马鸣李海波来源:《电脑知识与技术》2012年第26期摘要:随着二维码的广泛应用和Android智能手机的进一步普及,该文介绍了一个通过Android平台下的摄像和绘图功能,利用二维码的编码和解码原理,通过Android手机对二维码的数据进行解析和编码,实现对二维码生成和识别系统。
该系统内容包括两部分:二维条码的生成系统设计和二维条码的识别系统设计。
生成系统完成了从输入数据到生成相应二维码的功能,识别系统完成对采集到的二维码符号进行译码还原出所携带信息的功能。
关键词:二维码;二维码生成;二维码识别;Android平台中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)26-6353-04Design and Realization of the QR Code Generation and Recognition System Based on Android MA Ming1, LI Hai-bo2(Nanyang Institute of Technology, Nanyang 473004, China)Abstract: Along with the wide application of QR Code and Android smart phones further popularity. This paper introduces a camera and drawing function in the Android workbench. Using of QR Code encoding and decoding principle, through the An? droid mobile phone resolve and code planar barcode to realize the QR Code identification and generate system. The content of this project includes the design of creation and recognition. The creation system completes the process from the input data to QR Code,and the recognition system completes the process of translating QR Code to relevant information.Key words: QR Code; The generation of QR Code; The recognition of QR Code; The Android Platform一维条码自出现以来,由于受信息容量的限制,不得不依赖数据库的存在。
毕设论文_加密二维码识别子系统的设计与实现
北京理工大学本科生毕业设计(论文)
第 1 章 绪论.......................................................................................................................1 1.1 研究背景与意义................................................................................................1 1.2 国内外研究情况................................................................................................2 1.3 课题研究对象.................................................................................................... 3 1.4 本文组织结构.................................................................................................... 3
该 子 系 统 在 完 成 后 ,通 过 使 用 二 维 码 存 储 信 息 的 方 式 达 到 了 组 织 机 构 信 息 高效高质量识别、录入的目的;通过加密实现了关键信息需要安全隐藏 、不能 被伪造的功能;虽然在加密后出现了文本长度过长的问题 ,但通过文本压缩的 方式得到了解决;对于二维码信息的管理 ,该系统对组织机构的多项信息进行 格式化,实现了快速的批量生成、搜索功能,为海量信息的管理提供了接口。 关键字:自动识别,二维码,加密,文本压缩,多串匹配
(完整版)二维码的生成与实现(matlab)
课程设计报告课题名称:二维码的生成与识别项目完成人(班级、学号、姓名):项目完成时间: 2017/6/15一、引言1、编写目的本学期学习《数字图像处理》,包含很多知识点,像:图像编码与压缩、图像相关变换、图像增强技术、图像复原技术,这些知识点的应用在实际编程中都非常重要。
纸上得来终觉浅,绝知此事要躬行。
所以,这次课程设计的目的主要就是巩固所学的数字图像处理的相关知识。
最终是我们通过该教学环节,把该课程以及相关知识融会贯通。
2、背景由于受信息的容量限制,一维条码仅仅是对“物品”的标识,而不是对“物品”的描述,故一维条码的使用不得不依赖数据库存在。
在使用上受到了极大的限制,效率很低。
二维码正是为了解决一维条码无法解决的问题而产生的。
二维码具有高密度、高可靠性等特点,可以用来表示数据文件、图像等,实现信息获取、网站跳转、广告推送、手机电商、优惠促销、会员管理等功能,具有很强的研究意义。
3、参考资料《数字图像处理》第三版胡学龙二、设计方案1、图像采集图像主要来自网上在线生成的二维码图像和该程序生成的二维码图像。
2、算法分析预处理过程灰度化-----平滑处理------二值化1.灰度化:一般都是为了减小图像原始数据量,便于后续处理时计算量更少,因为图像处理不一定需要对彩色图像的RGB三个分量都进行处理2.平滑处理:图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。
图像平滑的方法包括:插值方法,线性平滑方法,卷积法等等。
这样的处理方法根据图像噪声的不同进行平滑,比如椒盐噪声,就采用线性平滑方法!3.二值化:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。
二维码解码二维码解码主要使用的是ZXing库,ZXing是个很经典的条码/二维码识别的开源类库3、代码实现打开图像function pushbutton1_Callback(hObject, eventdata, handles) global im;[filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'} ,'选择图像');if isequal(filename,0)||isequal(pathname,0)errordlg('您还没有选取图片!!','温馨提示');%如果没有输入,则创建错误对话框return;elsedisp(['User selected',fullfile(pathname,filename)]);fprintf('fffffff%s\n',filename);im=imread(filename);%读取图像figureimshow(im);%在坐标axes1显示原图像title('原始图像');End灰度化处理function pushbutton4_Callback(hObject, eventdata, handles)global im;global II;I=im;[w,h,l]=size(I); %图像大小II=[];for i=1:hfor j=1:wII(j,i)=0.3*I(j,i,1)+0.59*I(j,i,2)+0.11*I(j,i,3); %灰度化处理公式endendfigure,imshow(II,[]) %显示图像title('二维码灰度化处理');平滑处理function pushbutton5_Callback(hObject, eventdata, handles)global II;global I3;III=uint8(II); %图像转换0-255Ix=imnoise(III,'salt & pepper',0.02); %对灰度化图像人为加噪声I3=medfilt2(Ix,[3,3]); %平滑处理figureimshow(Ix)title('二维码加噪处理');figureimshow(I3)title('二维码平滑处理');二值化处理function pushbutton6_Callback(hObject, eventdata, handles)global I3;global I_otsu;I_otsu=otsut(I3); %二值化处理figureimshow(I_otsu,[])title('二维码二值化处理');旋转校正function pushbutton7_Callback(hObject, eventdata, handles) global im;%倾斜校正:二值化,取边缘,Hough变换得到角度,旋转I=im;bw=rgb2gray(I); %rgb转换为灰度图bw=im2bw(I,graythresh(bw)); %二值化过程bw=double(bw);BW=edge(bw,'canny'); %canny边缘处理BW1=BW;figureimshow(BW1);title('canny 边界图像'); %显示图像[H,T,R]=hough(BW);figure,imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); xlabel('\theta'),ylabel('\rho');axis on, axis normal,hold on;P=houghpeaks(H,4,'threshold',ceil(0.3*max(H(:)))); %hough变化峰值检测x=T(P(:,2)); y = R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',50,'MinLength',7); %hough检测线段figure,imshow(BW),title('直线标识图像');max_len = 0;hold on;for k=1:length(lines) %主要把线条和点显示出来xy=[lines(k).point1;lines(k).point2];% 标出线段plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');% 标出线段的起始和终端点plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);Len(k)=len;if (len>max_len)max_len=len;xy_long=xy;endend% 强调最长的部分plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue');[L1 Index1]=max(Len(:));% 最长线段的起始和终止点x1=[lines(Index1).point1(1) lines(Index1).point2(1)];y1=[lines(Index1).point1(2) lines(Index1).point2(2)];% 求得线段的斜率K1=-(lines(Index1).point1(2)-lines(Index1).point2(2))/...(lines(Index1).point1(1)-lines(Index1).point2(1))angle=atan(K1)*180/pi %显示角度A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号figure,imshow(A);解码function pushbutton3_Callback(hObject, eventdata, handles)global I_otsu; %global 定义全局变量global im;global KL;global Ijibian;I_jiema=Ijibian;I_jiema=I_otsu; %二值I_jiema=KL;I_jiema=im;str=zxing_decode(I_jiema) %解码set(handles.edit1,'String',str); %显示字符三、出错处理1、出错信息2、出错处理方法及补救措施主要是由于导入的jar包文件的路径错误而导致的,所以修改好对应的路径即可。
精品毕业论文答辩--基于Web的毕业设计课题系统设计及实现 PPT素材
教师信息修改模块:
该模块是教师的注册页面,教师从这个页面开始进入毕业设计课题系 统,在这个模块中教师对登陆信息提交和修改。可以输入个人的信息 进行注册也可以在注册后修改已提交的信息
h
27
学生信息修改模块
该模块是学生的注册页面,学生从这个页面开始进入毕业设计课题系 统,在这个模块中学生对登陆信息提交和修改。可以输入个人的信息 进行注册也可以在注册后修改已提交的信息。输入学生的登陆所需信 息该用户名存在显示结果重新注册进入登陆界面若注册注册或修改信 息学生信息修改模块图
h
6
IIS简介
本次课设选用的服务器是IIS,IIS是Internet Information Server的缩写, 它是微软公司主推的Web服务器, 最新的版本是Windows2000里面包 含的IIS 5.0,IIS与WindowNT Server完全集成在一起, 因而用户
能够利用Windows NT Server和NTFS(NT File System,NT的文件系统)内置 的安全特性, 建立强大、灵活而安全的Internet和Intranet站点。 IIS的一个重要 特性是支持ASP。IIS 3.0版本以后引入了ASP,可以很容易的张贴动态内容和
h
10
B/S结构
B/S结构,即Browser/Server(浏览器/服务器)结构, 是随着Internet技术的兴起,对C/S结构的一种变化
或者改进的结构。在这种结构下,用户界面完全 通过WWW浏览器实现,一部分事务逻辑在前端实
现,但是主要事务逻辑在服务器端实现,形成所 谓3-tier结构。B/S结构,主要是利用了不断成熟的 WWW浏览器技术,结合浏览器的多种Script语言 (VBScript、JavaScript…)和ActiveX技术,用通用
手机二维码识别系统的设计与实现
手机二维码识别系统的设计与实现徐玲;蒋欣志;张杰【摘要】Based on the research of two-dimensional code and recognition of mobile phone, the authors have developed a two-dimensional code recognition system on Android platform. In the system architecture design, the two-dimensional code recognition system platform support layer, client application layer, cloud handle layer were hierarchically designed to ensure the system security. According to the requirements, the system function models and cases analyses were given. Finally, the two-dimensional code core encode and decode functions of mobile phone were achieved.%在研究二维码及其手机识别技术的基础上,开发了基于Android 平台的手机二维码识别系统,在系统架构设计中将二维码识别系统的平台支撑层、客户端应用层、云端处理层进行分层设计,保证了系统的安全性,根据需求给出系统的功能模块划分和用例分析,最后实现了手机二维码的编码解码的核心功能.【期刊名称】《计算机应用》【年(卷),期】2012(032)005【总页数】3页(P1474-1476)【关键词】二维码识别;手机;QR码;J2EE;SSH2;Android【作者】徐玲;蒋欣志;张杰【作者单位】重庆大学软件学院,重庆400030;重庆大学软件学院,重庆400030;重庆理工大学电子信息与自动化学院,重庆400054【正文语种】中文【中图分类】TP311.520 引言二维码(2-dimensional code)作为一种信息存储和传递技术,是按照特定的编码规则形成的平面几何图形[1-4]。
二维码的生成与解码毕业设计
二维码的生成与解码摘要随着信息技术的发展,智能移动终端的不断普及,二维码的便捷性,决定了二维码技术具有良好的应用前景. 二维码是按章某种规律在二维空间中分布的黑白相间的几何图形,主要用于表示数据,其优点是方便,快捷.目前光蛋用于电子商务,票务系统等.可以说二维码与人们的生活息息相关.作为一项前沿技术,二维码更赋予了神秘的面纱.本系统主要目的是让二维码的使用更加便利,让二维码真正的走到寻常人间.因此二维码的生成与解码的课题研究无论从理论上还是在实践上都具有十分重要的意义。
本文结合与市面上常见的工程项目,完成如下的几项内容:第一,介绍二维码的国内外研究趋势,以及二维码的主要类别,特点,应用,实现对二维码的深刻的理论研究。
第二,探讨面向android手机的图像处理技术.因为手机的处理能力有限,一些效果不错但是处理时间开销大运算复杂的经典处理方法并不适用,如何使用时间复杂度都合适的方法识别快速响应码成为本文探讨的重点。
第三,研究二维码生成采用的不同算法对识别的影响,开发二维码生成与解码基于手机的系统(APP)。
关键字:二维码;快速反应码;定位;androidQR code generation and decodingAbstractAlong with the development of information technology, intelligent mobile terminal expansion, qr code convenience, determines the qr code technology has good application prospect. Qr code's chapter according to certain rule in 2 d space distribution of the geometry of black and white alternate with, is mainly used to represent data, its advantage is convenient, fast. The current light egg for e-commerce, ticketing system, etc. To say the qr code is closely related to people's life. As a leading edge technology, qr code gives more mysterious veil. This system main purpose is to let the qr code to use more convenient, let the qr code really went to the common room. So the qr code generation and decoding of research both in theory or in practice is of great significance.In this paper, combining with common engineering projects on the market, complete the following several contents:First, introduce the research trend of qr code, and the main categories of qr code, characteristic, application, realize the profound theoretical research of qr code.Second, explore the image processing technology for android mobile phones. Because of mobile phone processing ability is limited, some good but processing time spending large computing complex classical processing method is not applicable, how to use the time complexity is suitable method to identify the response code to become the focus of this paper.Third, study the qr code generation using different algorithms to identify the influence of development of qr code generation and decoding system based on mobile phones (APP). Key words:QR code; rapid response code; positioning; android目录摘要 (i)Abstract (ii)1 绪论 (1)1.1 论文研究的背景及意义 (1)1.1.1 论文研究的背景 (1)1.1.2 课题研究的意义 (1)1.2 课题主要目的 (2)1.3 本系统的开发环境 (2)1.4 本课题的主要成果及论文结构 (2)1.4.1 主要成果 (2)1.4.2 论文的主要结构 (2)1.5 本章小结 (2)2 相关技术分析 (3)2.1 android技术 (3)2.2 二维码 (4)2.2.1 什么是二维码: (4)2.2.2 国外研究发展现状 (4)2.2.3 国内研究发展现状 (4)2.2.4 国内外发展对比分析 (5)2.3 QR码的结构与编码理论 (5)2.3.1 什么是QR CODE (5)2.4 QR码的编码技术 (6)2.5. 本章小结 (7)3 二维码android手机识别系统设计 (8)3.1 需求分析 (8)3.1.1 概述 (8)3.1.2 任务概述 (8)3.1.3 需求规定 (9)3.2 系统设计 (10)3.2.1 概述 (10)3.2.2 编写目的 (10)3.2.3 定义 (11)3.2.4 总体设计 (11)3.2.5 运行设计 (14)3.2.6 系统出错处理 (15)3.3 基于android的二维码识别系统概要设计 (15)3.3.1 本系统包含模块 (15)3.3.2 系统主要模块 (16)3.3.3 系统流程图 (18)3.4 导入项目 (18)3.4.1 简化过程 (18)3.4.2 解码原理 (19)3.5 Android扫描系统概括 (22)3.6 Android camera的调用 (24)3.7 生成二维码的功能实现 (26)3.8 其它处理功能的实现 (27)4 Android 条形码扫描功能结果展示 (29)4.1 Android条形码模拟器及配置文件 (29)4.2 Android 识别条形码扫描功能和生成模块介绍 (30)4.3 二维码扫描结果展示 (31)5 系统调试及测试 (33)5.1 程序调试 (33)5.2 程序的测试 (33)5.2.1 测试的重要性及目的 (33)5.2.2 测试的步骤 (34)5.2.3 测试的主要内容 (34)5.3 本章小结 (35)结论 (36)参考文献 (37)致谢 (38)外文原文 (39)中文翻译 (50)1 绪论1.1 论文研究的背景及意义1.1.1 论文研究的背景条形码技术⑴起源于二次大战以后。
基于Android的二维码的生成与识别系统的设计与实现设计报告
基于Android的二维码的生成与识别系统的设计与实现摘要:随着二维码的广泛应用和 Android 智能手机的进一步普及,该文介绍了一个通过 Android 平台下的摄像和绘图功能,利用二维码的编码和解码原理,通过 Android 手机对二维码的数据进行解析和编码,实现对二维码生成和识别系统。
该系统内容包括两部分:二维条码的生成系统设计和二维条码的识别系统设计。
生成系统完成了从输入数据到生成相应二维码的功能,识别系统完成对采集到的二维码符号进行译码还原出所携带信息的功能。
关键词:二维码;二维码生成;二维码识别; Android 平台一维条码自出现以来,由于受信息容量的限制,不得不依赖数据库的存在。
在没有数据库和不联网的地方,一维条码的使用受到了较大的限制。
另外,要用一维条码表示汉字的场合,显得十分的不方便,且效率低下。
二维码的出现是为了解决一维条码无法解决的问题而产生。
因而它具有高密度、高可靠性等特点,所以可以用它表示数据文件(包括汉字文件)图像等。
二维码是大容量、高可靠性信息实现存储、携带并自动适读的最理想的方法。
手机二维码的业务类型主要有两种:一是识读,就是借助应用软件直接读出码上信息,它可以衍生出上网浏览、电子购物等多种应用;二是被读,就是由商家向手机用户发送二维码信息,通过设备识读,可作身份识别、电子凭证等之用。
1 系统相关技术分析1.1 Android 系统架构 Android 是一种以 Linux 为基础的开放源代码操作系统,主要使用于便携设备。
Android 的系统架构采用了分层的架构。
android 分为四个层,分别是应用程序层、应用程序框架层、系统运行库层和 linux 内核层。
随着 Android 的快速发展,如今已允许开发者使用多种编程语言来开发Android 应用程序,而不再是以前只能使用 Java 开发 Android 应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。
二维码的生成与实现(matlab)
课程设计报告课题名称:二维码的生成与识别项目完成人(班级、学号、姓名):项目完成时间: 2017/6/15一、引言1、编写目的本学期学习《数字图像处理》,包含很多知识点,像:图像编码与压缩、图像相关变换、图像增强技术、图像复原技术,这些知识点的应用在实际编程中都非常重要。
纸上得来终觉浅,绝知此事要躬行。
所以,这次课程设计的目的主要就是巩固所学的数字图像处理的相关知识。
最终是我们通过该教学环节,把该课程以及相关知识融会贯通。
2、背景由于受信息的容量限制,一维条码仅仅是对“物品”的标识,而不是对“物品”的描述,故一维条码的使用不得不依赖数据库存在。
在使用上受到了极大的限制,效率很低。
二维码正是为了解决一维条码无法解决的问题而产生的。
二维码具有高密度、高可靠性等特点,可以用来表示数据文件、图像等,实现信息获取、网站跳转、广告推送、手机电商、优惠促销、会员管理等功能,具有很强的研究意义。
3、参考资料《数字图像处理》第三版胡学龙二、设计方案1、图像采集图像主要来自网上在线生成的二维码图像和该程序生成的二维码图像。
2、算法分析预处理过程灰度化-----平滑处理------二值化1.灰度化:一般都是为了减小图像原始数据量,便于后续处理时计算量更少,因为图像处理不一定需要对彩色图像的RGB三个分量都进行处理2.平滑处理:图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。
图像平滑的方法包括:插值方法,线性平滑方法,卷积法等等。
这样的处理方法根据图像噪声的不同进行平滑,比如椒盐噪声,就采用线性平滑方法!3.二值化:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。
二维码解码二维码解码主要使用的是ZXing库,ZXing是个很经典的条码/二维码识别的开源类库3、代码实现打开图像function pushbutton1_Callback(hObject, eventdata, handles) global im;[filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'} ,'选择图像');if isequal(filename,0)||isequal(pathname,0)errordlg('您还没有选取图片!!','温馨提示');%如果没有输入,则创建错误对话框return;elsedisp(['User selected',fullfile(pathname,filename)]);fprintf('fffffff%s\n',filename);im=imread(filename);%读取图像figureimshow(im);%在坐标axes1显示原图像title('原始图像');End灰度化处理function pushbutton4_Callback(hObject, eventdata, handles)global im;global II;I=im;[w,h,l]=size(I); %图像大小II=[];for i=1:hfor j=1:wII(j,i)=0.3*I(j,i,1)+0.59*I(j,i,2)+0.11*I(j,i,3); %灰度化处理公式endendfigure,imshow(II,[]) %显示图像title('二维码灰度化处理');平滑处理function pushbutton5_Callback(hObject, eventdata, handles)global II;global I3;III=uint8(II); %图像转换0-255Ix=imnoise(III,'salt & pepper',0.02); %对灰度化图像人为加噪声I3=medfilt2(Ix,[3,3]); %平滑处理figureimshow(Ix)title('二维码加噪处理');figureimshow(I3)title('二维码平滑处理');二值化处理function pushbutton6_Callback(hObject, eventdata, handles)global I3;global I_otsu;I_otsu=otsut(I3); %二值化处理figureimshow(I_otsu,[])title('二维码二值化处理');旋转校正function pushbutton7_Callback(hObject, eventdata, handles) global im;%倾斜校正:二值化,取边缘,Hough变换得到角度,旋转I=im;bw=rgb2gray(I); %rgb转换为灰度图bw=im2bw(I,graythresh(bw)); %二值化过程bw=double(bw);BW=edge(bw,'canny'); %canny边缘处理BW1=BW;figureimshow(BW1);title('canny 边界图像'); %显示图像[H,T,R]=hough(BW);figure,imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); xlabel('\theta'),ylabel('\rho');axis on, axis normal,hold on;P=houghpeaks(H,4,'threshold',ceil(0.3*max(H(:)))); %hough变化峰值检测x=T(P(:,2)); y = R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',50,'MinLength',7); %hough检测线段figure,imshow(BW),title('直线标识图像');max_len = 0;hold on;for k=1:length(lines) %主要把线条和点显示出来xy=[lines(k).point1;lines(k).point2];% 标出线段plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');% 标出线段的起始和终端点plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);Len(k)=len;if (len>max_len)max_len=len;xy_long=xy;endend% 强调最长的部分plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue');[L1 Index1]=max(Len(:));% 最长线段的起始和终止点x1=[lines(Index1).point1(1) lines(Index1).point2(1)];y1=[lines(Index1).point1(2) lines(Index1).point2(2)];% 求得线段的斜率K1=-(lines(Index1).point1(2)-lines(Index1).point2(2))/...(lines(Index1).point1(1)-lines(Index1).point2(1))angle=atan(K1)*180/pi %显示角度A = imrotate(I,-angle,'bilinear');% imrate 是逆时针的所以取一个负号figure,imshow(A);解码function pushbutton3_Callback(hObject, eventdata, handles)global I_otsu; %global 定义全局变量global im;global KL;global Ijibian;I_jiema=Ijibian;I_jiema=I_otsu; %二值I_jiema=KL;I_jiema=im;str=zxing_decode(I_jiema) %解码set(handles.edit1,'String',str); %显示字符三、出错处理1、出错信息2、出错处理方法及补救措施主要是由于导入的jar包文件的路径错误而导致的,所以修改好对应的路径即可。
二维码生成与解析代码实现
二维码生成与解析代码实现二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字、图片、网址等信息的条码图片。
如下图二维码的特点:1. 高密度编码,信息容量大可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
2. 编码范围广该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据。
3. 容错能力强,具有纠错功能这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。
4. 译码可靠性高它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。
5. 可引入加密措施保密性、防伪性好。
6. 成本低,易制作,持久耐用正因为以上这些特点,二维码现在越来越流行,应用也是越来越广(详细了解请见百度百科,介绍不是本篇重点),所以掌握如何开发二维码是非常不错的知识储备,因此本篇博文将为大家讲解如何生成、解析二维码。
一、Java所需jar包:QRCode.jar/detail/wangpeng047/4008532TwoDimensionCode类:二维码操作核心类[java]view plaincopy1.package qrcode;2.3.import java.awt.Color;4.import java.awt.Graphics2D;5.import java.awt.image.BufferedImage;6.import java.io.File;7.import java.io.IOException;8.import java.io.InputStream;9.import java.io.OutputStream;10.11.import javax.imageio.ImageIO;12.13.import jp.sourceforge.qrcode.QRCodeDecoder;14.import jp.sourceforge.qrcode.exception.DecodingFailedException;15.16.import com.swetake.util.Qrcode;17.18.public class TwoDimensionCode {19.20./**21. * 生成二维码(QRCode)图片22. * @param content 存储内容23. * @param imgPath 图片路径24. */25.public void encoderQRCode(String content, String imgPath) {26.this.encoderQRCode(content, imgPath, "png", 7);27. }28.29./**30. * 生成二维码(QRCode)图片31. * @param content 存储内容32. * @param output 输出流33. */34.public void encoderQRCode(String content, OutputStream output) {35.this.encoderQRCode(content, output, "png", 7);36. }37.38./**39. * 生成二维码(QRCode)图片40. * @param content 存储内容41. * @param imgPath 图片路径42. * @param imgType 图片类型43. */44.public void encoderQRCode(String content, String imgPath, String imgType) {45.this.encoderQRCode(content, imgPath, imgType, 7);46. }47.48./**49. * 生成二维码(QRCode)图片50. * @param content 存储内容51. * @param output 输出流52. * @param imgType 图片类型53. */54.public void encoderQRCode(String content, OutputStream output, String imgType) {55.this.encoderQRCode(content, output, imgType, 7);56. }57.58./**59. * 生成二维码(QRCode)图片60. * @param content 存储内容61. * @param imgPath 图片路径62. * @param imgType 图片类型63. * @param size 二维码尺寸64. */65.public void encoderQRCode(String content, String imgPath, String imgType, int size) {66.try {67. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);68.69. File imgFile = new File(imgPath);70.// 生成二维码QRCode图片71. ImageIO.write(bufImg, imgType, imgFile);72. } catch (Exception e) {73. e.printStackTrace();74. }75. }76.77./**78. * 生成二维码(QRCode)图片79. * @param content 存储内容80. * @param output 输出流81. * @param imgType 图片类型82. * @param size 二维码尺寸83. */84.public void encoderQRCode(String content, OutputStream output, String imgType, int size) {85.try {86. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);87.// 生成二维码QRCode图片88. ImageIO.write(bufImg, imgType, output);89. } catch (Exception e) {90. e.printStackTrace();91. }92. }93.94./**95. * 生成二维码(QRCode)图片的公共方法96. * @param content 存储内容97. * @param imgType 图片类型98. * @param size 二维码尺寸99. * @return100. */101.private BufferedImage qRCodeCommon(String content, String imgType, int s ize) {102. BufferedImage bufImg = null;103.try {104. Qrcode qrcodeHandler = new Qrcode();105.// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小106. qrcodeHandler.setQrcodeErrorCorrect('M');107. qrcodeHandler.setQrcodeEncodeMode('B');108.// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大109. qrcodeHandler.setQrcodeVersion(size);110.// 获得内容的字节数组,设置编码格式111.byte[] contentBytes = content.getBytes("utf-8");112.// 图片尺寸113.int imgSize = 67 + 12 * (size - 1);114. bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_ INT_RGB);115. Graphics2D gs = bufImg.createGraphics();116.// 设置背景颜色117. gs.setBackground(Color.WHITE);118. gs.clearRect(0, 0, imgSize, imgSize);119.120.// 设定图像颜色> BLACK121. gs.setColor(Color.BLACK);122.// 设置偏移量,不设置可能导致解析出错123.int pixoff = 2;124.// 输出内容> 二维码125.if (contentBytes.length > 0 && contentBytes.length < 800) { 126.boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes); 127.for (int i = 0; i < codeOut.length; i++) {128.for (int j = 0; j < codeOut.length; j++) {129.if (codeOut[j][i]) {130. gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3 );131. }132. }133. }134. } else {135.throw new Exception("QRCode content bytes length = " + conte ntBytes.length + " not in [0, 800].");136. }137. gs.dispose();138. bufImg.flush();139. } catch (Exception e) {140. e.printStackTrace();141. }142.return bufImg;143. }144.145./**146. * 解析二维码(QRCode)147. * @param imgPath 图片路径148. * @return149. */150.public String decoderQRCode(String imgPath) {151.// QRCode 二维码图片的文件152. File imageFile = new File(imgPath);153. BufferedImage bufImg = null;154. String content = null;155.try {156. bufImg = ImageIO.read(imageFile);157. QRCodeDecoder decoder = new QRCodeDecoder();158. content = new String(decoder.decode(new TwoDimensionCodeImage(bu fImg)), "utf-8");159. } catch (IOException e) {160. System.out.println("Error: " + e.getMessage());161. e.printStackTrace();162. } catch (DecodingFailedException dfe) {163. System.out.println("Error: " + dfe.getMessage());164. dfe.printStackTrace();165. }166.return content;167. }168.169./**170. * 解析二维码(QRCode)171. * @param input 输入流172. * @return173. */174.public String decoderQRCode(InputStream input) {175. BufferedImage bufImg = null;176. String content = null;177.try {178. bufImg = ImageIO.read(input);179. QRCodeDecoder decoder = new QRCodeDecoder();180. content = new String(decoder.decode(new TwoDimensionCodeImage(bu fImg)), "utf-8");181. } catch (IOException e) {182. System.out.println("Error: " + e.getMessage());183. e.printStackTrace();184. } catch (DecodingFailedException dfe) {185. System.out.println("Error: " + dfe.getMessage());186. dfe.printStackTrace();187. }188.return content;189. }190.191.public static void main(String[] args) {192. String imgPath = "G:/TDDOWNLOAD/Michael_QRCode.png";193. String encoderContent = "Hello 大大、小小,welcome to QRCode!" + "\nMyblog [ ]" + "\nEMail [ sjsky007 @ ]";194. TwoDimensionCode handler = new TwoDimensionCode();195. handler.encoderQRCode(encoderContent, imgPath, "png");196.// try {197.// OutputStream output = new FileOutputStream(imgPath);198.// handler.encoderQRCode(content, output);199.// } catch (Exception e) {200.// e.printStackTrace();201.// }202. System.out.println("========encoder success");203.204.205. String decoderContent = handler.decoderQRCode(imgPath);206. System.out.println("解析结果如下:");207. System.out.println(decoderContent);208. System.out.println("========decoder success!!!");209. }210.}TwoDimensionCodeImage 类:二维码图片对象[java]view plaincopy1.package qrcode;2.3.import java.awt.image.BufferedImage;4.5.import jp.sourceforge.qrcode.data.QRCodeImage;6.7.public class TwoDimensionCodeImage implements QRCodeImage { 8.9. BufferedImage bufImg;10.11.public TwoDimensionCodeImage(BufferedImage bufImg) {12.this.bufImg = bufImg;13. }14.15.@Override16.public int getHeight() {17.return bufImg.getHeight();18. }19.20.@Override21.public int getPixel(int x, int y) {22.return bufImg.getRGB(x, y);23. }24.25.@Override26.public int getWidth() {27.return bufImg.getWidth();28. }29.30.}。
Android二维码的生成毕设报告
A n d r o i d二维码的生成毕设报告目录第一章系统概述 (6)1.1项目开发的背景和意义 (6)1.1.1 项目开发的背景 (6)1.1.2 项目开发的意义 (8)1.2项目开发的环境 (9)1.2.1 硬件环境 (9)1.2.2 软件环境 (9)1.3开发技术的介绍 (9)1.3.1 Android技术介绍 (9)1.3.2 Android系统构架介绍 (9)1.3.3 Eclipse简介 (13)1.3.4 ADT、 Android SDK简介 (13)第二章可行性分析 (14)2.1编写目的 (14)2.2可行性研究任务 (14)2.2.1 技术可行性 (14)2.2.2 经济可行性 (14)2.2.3 操作可行性 (15)2.3可行性研究结论 (15)第三章需求分析 (16)3.1编写目的 (16)3.2功能需求分析 (16)3.3数据流图(DFD) (17)3.3.1 顶层数据流图 (17)3.3.2 一层数据流图 (17)3.3.3 二层数据流图 (18)3.3.4 三层数据流图 (18)3.4数据字典(DD) (19)第四章总体设计 (21)4.1编写目的 (21)4.2系统功能图 (21)4.3系统流程图 (22)4.3.1 总系统流程图 (22)4.3.2 生成二维码并保存部分流程图 (23)4.3.3 显示图片部分流程图 (24)4.4数据库 (25)4.4.1 sdcard卡对应的数据库 (25)4.4.2 更新数据库说明 (27)第五章软件设计 (28)5.1用户界面设计 (28)5.2文件介绍 (28)5.2.1 资源文件中的代码 (30)5.3实现功能的代码介绍 (34)5.3.1 负责生成二维码的CaptureZxingActivity (34)5.3.2 显示图片的lookpictureAvtivity (41)5.3.3 CaptureZxing Manifest.xml文件介绍 (46)第六章软件测试 (47)6.1生成二维码功能测试 (47)6.1.1 图标 (47)6.1.2 生成并保存功能 (47)6.2显示图片功能测试 (49)6.2.1 “下一张”按钮测试 (49)6.2.2 “上一张”按钮测试 (49)6.2.3 搜索功能和“图片详情”按钮验证 (50)6.2.4 删除功能测试 (51)结束语 (52)致谢 (53)参考文献 (54)附录I 英文资料翻译 (55)中文摘要二维码生成的开发研究主要是为了完善手机二维码的功能,让用户可以随时随地的生成二维码。
毕业设计开题报告样文基于Android的二维码识别系统的设计与实现
毕业设计开题报告
(2)功能结构图
图1 系统功能结构图
2.3系统设计拟采用的方法
本设计采用面向对象的开发方法。
本课题拟在Windows 7 系统下开发,并配备安卓系统的智能手机进行测试。
本系统采用的开发工具是Eclipse和Android SDK 以及ADT插件,采用的开发语言是Java。
系统有较高的安全性和较好的性能。
2.4毕业设计的进度安排
(1)学习调研及收集资料:(第一周至第二周)
1)对开发工具和开发环境进行熟悉。
2)上网搜索或者是去图书馆查阅相关资料。
3)根据课题,收集、熟悉相关资料,了解二维码的识别原理和流程。
(2)需求分析:在调研、收集资料和了解二维码的识别原理和流程的基础上对设计课题进行需求分析并撰写需求规格说明书。
(第三周至第四周)
(3)概要设计:在需求分析的基础上,对系统的总体功能进行模块划分,以明确模块功能设计的任务和要求。
(第五周至第六周)
(4)详细设计:在概要设计的基础上,确定各模块功能。
(第七周至第八周)(5)程序编码:根据各模块的功能,进行程序编码。
(第九周至第十一周)(6)测试与调试:设计测试用例,进行相关测试。
(第十二周)
(7)撰写毕业论文。
(第十三周至第十四周)
注:1、表前4项由学生填写后,交指导教师签署意见,经主管院系领导审批后,才能开题。
2、毕业论文(设计)完成后此表装订入毕业论文(设计)附件册中。
手机二维码识别系统的设计与实现
3 . 1 二维 码生 成功 能 的实现 利用 T w o Di me n s i o n C o d e中 的 O R c o d e C o m.
据存 储 的地方 。
局, 了解其功能 , 并对整个系统 的操作进行控制 ; O R
C o d e解 码层 是 通 过 对二 维 码 图形 一 系 列 解码 处 理
图像处理的类 ,在整个程序中 , C a m e r a A p p D e —
c o d e C l a s s 是 实现 图像 处 理 的类 , 为 了实现 图像处 理
间, 具体方法是将 图像进行压缩转换成 J P E G格式。
( 6 ) 二维条码解码器 : 把拍摄来 的二维条码进行 解码 , 从 而显 示 可读信 息 。 在实际使用这些条码手机识读设备 中, 人们用
手 机 镜头 对 准 需要 识读 的条 码 , 进 行 条 码 图形 的采 集, 拍摄 的图像 由镜头传 出经过光学传感器进行信
( 2 ) 图像处理模块 输入接 口, 手机摄像头所取得的 2 4 位位 图就是 进行图像处理的数据 ,图像数据是去掉位图文件头
统 系 的 计 设
最终将解码数据传输到用户手中进行数据 的处理。
1 . 2系统的功能简介 识别系统 的设计 目的是为了识别 Q R码 ,主要 利用 的是 J 2 ME平台技术中的手机应用程序。人们 利用手机拍摄识读 的 Q R码符号 ,经过手机识别系 统一 系列的处理后获取编码前的网址信息 , 使得人 们可以通过简单 的点击进行 网址浏览 , 为人们登录 网址浏览信息提供了便利性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
论文的结构和主要内容
第一部分 绪论,介绍了本文课题的背景和意义。 第二部分 二维码的编码规则。 第三部分 二维码识别系统的总体框架 第四部分 二维码图像预处理模块的设计和实现 第五部分 二维码解码模块的设计与实现 第六部分 系统的调试,运行和测试
系统需求分析
本系统是实现二维码的编码与译码。首先根据二维码的编码规则 生成二维码,然后采集二维码,将采集的二维码图像郊游解码器 进行解码。 二维码可以包含许多信息,最常见的是一些产品信息。当然还可 以包含一个链接地址;一个短信内容;一个后台应用程序等。本 解码器主要实现下面几个功能: 1.显示产品信息 如果二维码包含的是这一类信息,就直接显示出来。 2.跳转链接地址 如果二维码的信息是一个链接地址,那么本软件就调用相应的浏 览器去打开这个链接地址。 3.发送短信 如果二维码的信息是一跳短信息,那么本软件就调用发短信的程 序去发送这个短信。
二维码解码模块算法 流程如右图所示。
二维码解码模块的设计与实现
译码 下面主要针对数字模式给出二维码的译码过程。
(1)首先得到数字个数n(对于版本1-H)即得到第5-15位的 数 据,如果n>=3执行(2),否则执行(3)。
(2)接着取10位数据流,转换成10进制得到3个数字str,保 存在content中,content+=str;并令n=n-3.如 n>=3,继续执行(2),否则执行(3)。
二维码生成与识别系统的设计与实现 --二维码的解码器
指导老师:杜俊俐
系统的背景及意义
背景 一维条码是由一组粗细不同,黑白相同的,条,空及相对应的字符(数字
字母)组成的条形符号,只是在一个方向(一般是水平方向)表达信息, 在垂直方向不表达任何信息,其一定的高度一般是为了便于阅读器的对准。 但是一维条形码存储的数据容量较小(30个字符左右),只能包含字母和 数字,条码尺寸较大(空间利用率很低)并且一旦损坏就不能识别。二维 条形码是在一维条形码的基础上发展起来的,是用某种特定的几何图形按 一定的规律在平面上分布的条,空相见的图形来记录数据符号信息,克服 了一维码的缺点。并且由于二维码的信息密度高,存储量大,纠错能力强, 而且其本身具有一定的防伪功能而得到迅速发展。国外的二维码技术已经 处于应用阶段,并且已研制了性能较好的二维码识别系统。而我国虽也研 制出了用于识别二维码的系统,但和国外相比还是有一定的差距的。 意义 由于二维码这种新兴的自动识别技术有其他自动识别技术无法比拟的优势, 它一出现就受到的很高的重视。本文研究的解码技术主要针对的是QR码。 QR码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,它除 具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉 字及图象多种文字信息、保密防伪性强等优点外,还具有如下主要特点: 普通的一维条码只能在横向位置表示大约 20 为的字母或数字信息,无纠 错功能,使用时候需要后台数据库的支持,而二维条码是横向纵向都存有 信息,可以放入字母、数字、汉字、照片、指纹等大量信息,相当一个可 移动的数据库。如果用一维条码与二维条码表示同样的信息,QR 二维码 占用的空间只是条码1/11 的面积。二维码已广泛应用与社会的各个系统, 如商品信息获取,网站跳转,广告推送,手机电商,防伪追溯,优惠促销, 会员管理,手机支付等,因此研究二维码的识别系统具有很重要的意义。
(3)如果n=2 ,取接下来的7为数据流,转换成10进制得到2 个数字str,保存在content中,content+=str;否则执行 (4)。
(4)如果n=1 ,取接下来的4为数据流,转换成10进制得到1 个数字str,保存在content中,content+=str;否则执行 (5)。
(5)结束。
图像灰度化 将拍摄的彩色图像根据转换公式转换成灰度图像.
图像去噪 拍摄的图像可能含有噪点,需对图像用中值滤波算法对图 像进行 去噪处理。
图像二值化 因为二维码是由黑 白模块组成的, 本身分割较为明显 , 所以二维 码的图像分割通常采用二值化方法 , 二值化方法具有速度快,容 易实现等优点 。 二值化方法是通过选取阈值 , 然后用阈值来对 图像中每个像素进行判断 , 如果灰度值大于该阈值 , 则用灰度值 的最大值替换该像素值 ; 相反, 若果灰度值小于 阈值 , 则用灰度 值的最小值替换该像素值 。
图像预处理模块的设计与实现
二值化算法过程就是求解阈 值 的过程 , 根据阈值值选取 范围的不同二值化算法又可 以分为全局阈值值算法和局 部阈值算法。本文采用的是 局部阈值进行图像二值化。 右图是图像预处理的流程。
二维码解码模块的设计与实现
QR码解码模块的功能 架构如右图。
二维码解码模块的设计与实现
系统需求分析
系统的功能需求流程图 如右图所示。
二维码识别系统总体流程实现规划
二维码识别系统模块之间以及系统总体算法的实现规划, 各模块之间以及系统总体算法的流程,如下图所示。
二维码识别系统模块之间以及系统总体算法的实现规划,各模块之间以及 系统总体算法的流程
图像预处理模块的设计与实现
二维码图像预处理可以分为3个部分: 彩色图像的灰度化利用中值 滤波进行图像平滑以及利用灰度图像二值化技术分割图像。
系统的调试、运行与测试
系统开发过程中的问题与解决方法 1. 关于寻像图形的寻找
在扫描图像的时候有些像素点不在图像图像中,可是也在 一定程度上满足1:1:3:1:1,原因就在于对这个比例误差 范围的规定。如果误差过大,会出现很多不满足的线段; 如果误差过小,有些寻像图像线段又找不到,所以必须寻 找合适的误差范围。经过反复测试发现误差在0.2-0.37之 间具有较好的效果. 2.加载静态库 由于要应用OpenCV的jar包,所以要将OpenCV的库文 件加载到程序中。由ቤተ መጻሕፍቲ ባይዱ开始对java加载静态库文件不是很 了解,走了不是弯路。其实回头想想也不是很难,只要了 解其原理就很容易实现。这里,加载OpenCV库文件步骤 如下。首先在新建的android项目文件夹libs中在新建一 个armeabi文件夹,将OpenCV库文件放在此文件夹中 。最后在程序初始化时候用System.loadLibrary()函 数加载库文件即可。