文档章节

图像验证码识别(八)——字符归一化

moki_oschina
 moki_oschina
发布于 2016/11/29 11:45
字数 783
阅读 91
收藏 2

前面提到了将验证码上的字符分割成一个单独的字符图片并且保存,但是扣下来的字符串可能会有倾斜的现象,因为现在很多网页验证码为了防止破解都对字符进行了一定的扭曲和旋转,即使是同一个网站的验证码,每个相同的字符很有可能都是不一样的,所以为了提高识别的正确率,在这里最好能让每次进行训练的字符能够保持同一个角度。所以首先需要做的就是旋转倾斜。

一、旋转倾斜

旋转倾斜的目的就是要提高识别的正确率,如果字符‘A’的模板是标准的,让一个横着的‘A’去训练肯定得不到正确的结果。不过怎么旋转呢?想要将每个字符都旋转到印刷体的角度那是很难的,也是不必要的,在这里采用的思想就是每次都旋转成为“最瘦的”。每次分割出来一个字符不管是横着的还是竖着的,都可以回到“最瘦”的角度。具体做法就是利用OpenCV的旋转函数.

 

[cpp]  view plain  copy

  1. cv::Mat M = cv::getRotationMatrix2D(center, angle, scale);  


getRotationMatrix2D这个函数所做的就是计算旋转矩阵,熟悉计算机图形学的都知道,图形在做各种变换的时候都是在原有的矩阵上乘以变换矩阵。这里center是CvPoint2D32f类型的结构体,其有两个float类型的变量分别表示要旋转的图像的宽和高,angle就是要旋转的角度,scale是旋转后的缩放系数。得到变换矩阵之后就可以进行旋转操作了

 

 

[cpp]  view plain  copy

  1. warpAffine(m_Mat,rotate_mat, M,cvSize(getWidth(),getHeight()),INTER_LINEAR,BORDER_CONSTANT,cvScalar(WHITE) );  


warpAffine函数就是进行旋转操作。

 

鉴于大部分验证码的旋转都不是特别夸张,所以处理时我让字符从旋转的范围定在顺时针-15度到15度,每次旋转一度,然后计算最左边第一个黑色像素到最右边第一个黑色像素的距离,取距离最小的角度最终让字符旋转那个角度。

可以看到分割出来的字符和原始的还是有点不太一样,由于测试用的验证码倾斜的并不明显,所以这里调整的也不是很明显。

二、归一化

由于验证码大小不一,图片上又大量背景像素,因此在进行最后一步识别的时候,还应该将验证码的大小缩放到固定的大小。在这里我是先得到字符像素的最小外包矩形,这样可以先把没有用的白色背景像素干扰取消掉。接下来就是将所有的字符都统一缩放到16*16的大小,这样最终得到的经过预处理的标准字符就可以开始训练识别了。

本文转载自:http://www.voidcn.com/blog/ysc6688/article/p-5736549.html

共有 人打赏支持
moki_oschina
粉丝 25
博文 191
码字总数 39962
作品 0
成都
程序员
私信 提问
Java基于opencv实现图像数字识别(二)—基本流程

Java基于opencv实现图像数字识别(二)—基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条;来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程。 ...

奇迹迪
06/10
0
0
deeplearning4j——卷积神经网络对验证码进行识别

一、前言 计算机视觉长久以来没有大的突破,卷积神经网络的出现,给这一领域带来了突破,本篇博客,将通过具体的实例来看看卷积神经网络在图像识别上的应用。 导读 1、问题描述 2、解决问题的...

冷血狂魔
10/09
0
0
使用OpenCV+Keras轻松破解验证码

选自Medium 作者:Adam Geitgey 机器之心编译 参与:李泽南、蒋思源 登录网站时必须输入的图片验证码可以用来识别访问者到底是人还是机器——这同时也是某种程度上的「图灵测试」,人工智能研...

机器之心
2017/12/14
0
0
仅需15分钟,使用OpenCV+Keras轻松破解验证码

  选自Medium   作者:Adam Geitgey   机器之心编译   参与:李泽南、蒋思源      登录网站时必须输入的图片验证码可以用来识别访问者到底是人还是机器——这同时也是某种程度上...

机器之心
2017/12/14
0
0
图像识别试验 - 字符验证码、车牌号、身份证号

© 野比 2012 欢迎大家和我讨论相关问题。 代码在此(注意此版并非最终版) 光学字符识别(OCR)是非常有用的技术。在验证码识别、车牌号识别、文字识别方面,基于字符的识别技术算是比较容易...

nothingfinal
03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL主从配置——双主

MySQL主从配置——双主 本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置,步骤是:先m...

弓正
3分钟前
0
0
centos下如何使用 beyond compare 对比工具

我这里的环境是centos7桌面版 三条命令安装beyond compare wget http://www.scootersoftware.com/bcompare-4.2.3.22587.x86_64.rpmrpm --import http://www.scootersoftware.com/RPM-GPG-K......

linuxprobe16
8分钟前
0
0
http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
45分钟前
6
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
56分钟前
9
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部