当前位置: 首页 > 编程日记 > 正文

MATLAB简易验证码识别程序介绍

本推文主要识别的验证码是这种:

1470684-20180828143522407-303431333.png
1470684-20180828143522703-2001089869.png
1470684-20180828143523143-1221740234.png

第一步: 二值化

所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。

1470684-20180828143523426-816729256.png
1470684-20180828143523711-2122411520.png
1470684-20180828143523954-1514888213.png

第二步: 文字分割

为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。

1470684-20180828143524236-2056586278.png
1470684-20180828143524446-350602146.png
1470684-20180828143524686-1197823720.png
1470684-20180828143524909-1816514472.png
1470684-20180828143525130-168638340.png
1470684-20180828143525355-1024259094.png
1470684-20180828143525560-1617479366.png
1470684-20180828143525740-269142558.png
1470684-20180828143525982-2050552431.png
1470684-20180828143526178-497842496.png
1470684-20180828143526369-1839088430.png

第三步: 标准化

对于部分特殊的验证码,需要对分割后的图片进行标准化处理,也就是说尽量把每个相同的字符都变成一样的格式,减少随机的程度。最简单的比如旋转还原,复杂点的比如扭曲还原等等。比如本文中分割后的数字1和8宽度不一致,把他们的宽度填充一致,就是标准化的一种。

可以看到上面切割后的字符1最右边一列像素都为0。

第四步: 学习 & 识别

这一步可以用很多种方法,最简单的就是模板对比,对每个出现过的字符进行处理后把点阵变成字符串,标明是什么字符后,通过字符串对比来判断相似度。

在文章的后半部分会详细解释我采用的算法。

训练集学习tran.m

width = 132; height = 20;%10张验证码 x 11个数字 共分割出 110张字符图片
%每个字符图片 高度20 x 宽度9180个像素
data = zeros(110, 180);chars = zeros(180, 10);     %用于存储10个数字字符的特征值 每个字符大小为20x9for name = 0:9im = imread(sprintf('%d.jpg', name));    %读取图片im = im2bw(im) == 0;                     %第一步:二值化 黑色1 白色0%第二步: 分割black = sum(im) ~= 0;    %20x132矩阵 从上向下求和为 1x132  不等于0 则横坐标对应的一列有字符像素white = sum(im) == 0;    %20x132矩阵 从上向下求和为 1x132  等于0 则横坐标对应的一列没有字符像素lower = find(min([black 0],[1 white]));     %获取11个字符的开始下标upper = find(min([0 black],[white 1])) - 1; %获取11个字符的结束下标for i=1:11ch = im(:,lower(i):upper(i));   %截取单个字符ch(20, 9) = 0;                  %第三步: 字符二值化矩阵大小标准化为20x9data(name*11 + i ,:) = ch(:);   %字符图片数据存入dataend
end%第四步: 学习 & 识别
class = clusterdata(data, 10);   %110个字符图片分为10%各个分类号对应的实际数字(人工识别后写进去的- -)
num  = [5 3 6 8 9 0 7 2 1 4];for i = 1:10%各类中的字符图片取均值im = mean(data(class == i, :)) > 0.5;  chars(:, num(i) + 1) = im; %存储
end

验证码识别ocr.m

function ret = ocr(filename)load;ret = zeros(1, 11);im = imread(filename);im = im2bw(im) == 0;        %第一步: 二值化%第二步: 分割black = sum(im) ~= 0;white = sum(im) == 0;lower = find(min([black 0],[1 white]));upper = find(min([0 black],[white 1])) - 1;for i=1:11ch = im(:,lower(i):upper(i));ch = ch(:);ch(180) = 0;    %第三步标准化%第四步: 识别[~, num] = max(sum(min(repmat(ch, 1, 10), chars)));ret(i) = num-1;end
end


来源: https://cloud.tencent.com/developer/article/1030270



来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/jins-note/p/9548065.html

相关文章:

mac终端命令-----常规操作

OSX 的文件系统 OSX 采用的Unix文件系统,所有文件都挂在跟目录 / 下面,所以不在要有Windows 下的盘符概念。 你在桌面上看到的硬盘都挂在 /Volumes 下。 比如接上个叫做 USBHD的移动硬盘,桌面上会显示出一个硬盘图标,它实际在哪里…

php true true true,php-为什么此评估为true

标签:php乳清这算是真的吗?$val20;//outputs that is an error123if($val2error123){echo that is an error123;}else{echo that is not an error123;}解决方法:您正在将字符串与整数进行比较.为了进行比较,首先将字符串转换为整数.当“ error123”转换为…

一个html文件放到服务器访问,访问云服务器里面的html文件

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情建站入门|…

limbo可以运行linux,这次真的了,安卓手机可以安装 Windows 10 了

原标题:这次真的了,安卓手机可以安装 Windows 10 了上回雷锋哥给大家分享过「安卓可以体验 "Windows 10" 了」实际上就是一个第三方安卓桌面启动器模仿 Windows 10 的主题,所以只能说是美化,并非真的运行 Windows 10 系…

Fedora dnf配置

1、在配置文件/etc/dnf/dnf.conf中加入: fastestmirrortruekeepcachetrue这样下载安装软件就快多了。 2、dnf常用命令 检查并升级可用软件包:$ dnf update删除缓存:$dnf clean all列出可用的软件源:$ dnf repolist搜索软件:$ dnf search $…

2021梧州一中高考成绩查询,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...

【摘要】高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年广西高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学!由于,各省级招…

php ip地址地区,PHP查询ip所在地(省份,市)

通过IP获取归属地图1 : 返回数据图2 : 查询成功如果喜欢的话,可以试试,几行代码就能搞定,我觉得还是挺实用的!!

描述一下 Intent 和 IntentFilter?

Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,…

linux字符界面教程,打造字符界面的多媒体Linux系统

打造字符界面的多媒体Linux系统打造字符界面的多媒体Linux系统0 环境与目标硬件:ThinkPad R52笔记本一台。目标:字符界面的LINUX系统,同时可以看图片,听音乐,看视频,无线上网。1 系统安装1.1 最小安装系统官…

Linux 环境 搭建Git 服务器,并且修改SSH端口使用

1.环境配置说明 服务器 CentOS 7 git(git version 1.8.3.1) 客户端 Windows10 SourceTree 2.安装 Git 服务器端安装: sudo yum -y install git 查看安装版本 #git --version git version 1.8.3.1 客户端安装 下载 SourceTree for Window 下…

php发光字体代码,CSS3怎么实现字体发光效果

这次给大家带来CSS3怎么实现字体发光效果,CSS3实现字体发光效果的注意事项有哪些,下面就是实战案例,一起来看一下。博客页面左上角的“猿来是勇者”文字已制作发光效果,分享方法如下:该属性为文本添加阴影效果text-shadow:h-shado…

计算机专业英语chapter012,计算机专业英语 chapter_1.ppt

计算机专业英语 chapter_1Chapter 1 Information Technology, The Internet, and You;Competencies;Competencies能力,要求After you have read this chapter, you should be able to: Explain the five parts of an information system: people, procedures, softw…

C#与C++的区别

1,C#不支持多重继承,这是与C明显区别的地方,说真的多重继承有时候用起来挺麻烦的,可能微软怕你用不好吧,不给你提供了,但我个人觉得没有了多重继承感觉有点可惜。 2.在标准的C#安全代码中不支持指针类型的操作&#xf…

黑裙安装linux环境,Linux学习笔记(一) ---- 安装Linux系统

学习Linux的第一件事情,你得先有个Linux系统,才能知道怎么学吧?于是安装Linux是第一部,找网上找了不少教程,自己总结了一下,些一个博文先。我安装的Linux是在VMWare 7.2版本上安装的,安装的是Ret Hat Linux…

mybatis批量更新的两种实现方式

mapper.xml文件&#xff0c;后台传入一个对象集合&#xff0c;另外如果是mysql数据库&#xff0c;一点在配置文件上加上&allowMultiQueriestrue&#xff0c;这样才可以执行多条sql&#xff0c;以下为mysql&#xff1a; <update id"batchUpdate" parameterType…

php常用20函数,PHP常用函数

//PHP设置跨域header("Access-Control-Allow-Origin:*");//PHP设置JSON头 以JSON格式输出header("Content-type:application/json; charsetutf-8");//正则取字符串preg_match_all(/字符串(.*?)字符串/i,$data,$out);// PHP把JSON对象转字符串不转码输出js…

tcpdump保存数据包

1、启动tcpdump tcpdump 2、查看网卡 tcpdump -D 3. 抓取报文后隔指定的时间保存一次 tcpdump -i eth3 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap 这里解释下-G选项 后面接时间 单位为秒 本例中的时间为60秒 4. 抓取报文后达到指定的大小保存一次 tcpdump -i eth3 -s0 -C 1 -…

在线翻译系统属于计算机应用领域中,【单选题】网状物编织物和机件上的滚花部分,可以在轮廓线附件用( )线示意画出...

参考答案如下单选【简答题】我决定明天五点起床。(ことになる・ことにする)题网【单选题】法律的规定:邀请招标,应向()个以上具备承担招标项目能力,资信良好的特定法人发出投标邀请书。状物轮【单选题】描述液体运动的方法不包括( )。编织部分【单选题】Everyone _________ on …

linux进行主机发现,linux – 网络上所有计算机的主机名发现

SSH不关心是否给出了要连接的主机名或IP地址(当有特定于主机的配置时,不确定是否适用).大多数MPI实现也不关心,例如在Open MPI连接中,URI地址都是数字,因此具有IP的主机文件可以正常使用.另一方面,HTTP服务器关心的是虚拟主机事件,其中许多不同站点解析为相同的IP地址,但服务器…

Android5.0之CoordinatorLayout的使用

CoordinatorLayout&#xff0c;中文译作协调者布局&#xff0c;光听这名字你可能很难判断出协调者布局有什么特点&#xff0c;那么我们来看看下面一张图片&#xff1a; 由于CSDN对图片大小的要求&#xff0c;我只能录制一个快速播放的动画&#xff0c;请大家见谅。但是显示效果…

微信js sdk动态引用

一般情况下&#xff0c;微信的js-sdk只需要直接引用script即可 <script src"http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 但是有的时候&#xff0c;当我们的网页访问的环境多样的时候&#xff0c;比如APP内部&#xff0c;手机浏览器时候&…

java qq协议 c#,C# WebQQ协议群发机器人(三)

在前两篇文章中我已经给了绝大部分的WEBQQ的操作在这篇文章中不在过多的说明做法有的时候需要自己添加一些功能呢 怎么做呢&#xff0c;我这里给出一个方法。在调试webqq机器人时 我用google浏览器 的F12开发者工具来捕捉网络包&#xff0c;webqq绝大多数都是GET请求 参数用来用…

矩阵计算在计算机科学中,开发者必读:计算机科学中的线性代数(附论文)

来源&#xff1a;机器之心作者&#xff1a;Petros Drineas、Michael W. Mahoney本文共3994字&#xff0c;建议阅读6分钟。本文为你分享一篇来自普渡大学与UC Berkeley两位教授的概述论文中的线性代数知识。矩阵计算在计算机科学中占有举足轻重的地位&#xff0c;是每个开发者都…

linux blfs安装桌面,【Linux】Ubuntu14.04安装bridge-utils安装brctl

1、下载bridge-utils http://www.linuxfromscratch.org/blfs/view/svn/basicnet/bridge-utils.html2、放到/usr/src 目录下输入&#xff1a;su以root运行输入&#xff1a;cp /home/joanna/桌面/bridge-utils-1.5.tar.gz /usr/src/bridge-utils-1.5.tar.gzbridge-utils拷贝到/…

HTML5左取函数,Javascript常用方法函数收集(一)

本文中&#xff0c;收集了一些比较常用的Javascript函数&#xff0c;希望对学习JS的朋友们有所帮助。1.字符串长度截取function cutstr(str, len) {var temp,icount 0,patrn /[^\x00-\xff]/&#xff0c;strre "";for (var i 0; i < str.length; i) {if (icoun…

智能指针unique_ptr

unique_ptr的一些操作&#xff1a; int main() {unique_ptr<int> uptr(new int(10));//unique_ptr<int> uptr2(uptr);//报错//unique_ptr<int> uptr3 uptr;//报错unique_ptr<int> uptr2 std::move(uptr);//转移所有权//cout << *uptr <<…

java 设计一个geometricobject类,geometricobject类

(2) Circle 类和 Rectangle 类是 GeometricObject 类的子类,其中应实现 父类的抽象方法。 (3) 程序主方法中创建两个几何对象,一个圆和一个矩形,并用 ......创建一个元素是 GeometricObject 类型的数组: ?GeometricObject[] geo new GeometricObject[10]; 8 使用 GeometricOb…

linux 源码安装浏览器,vps+linux+安装浏览器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情什么是弹性…

计算机基础及应用教案,计算机应用基础教案:数制的概念及转换(中职教育)

计算机应用基础教案&#xff1a;数制的概念及转换(中职教育) (6页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分课题&#xff1a;数制的概念及转换教学目标&#xff1a;1、了解和学握计算机…

博客园第一天,开放封闭原则

&#xff08;以下内容来自网络&#xff0c;只为加深理解&#xff09; 开放封闭原则 软件实体软件实体应该是可扩展&#xff0c;而不可修改的。 开放&#xff1a;扩展 封闭&#xff1a;修改 对扩展开放意味着在又新的需求或变化时&#xff0c;可以对代码进行扩展&#xff0c;以适…