- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
python做神经⽹络识别车牌_OpenCV进阶之路:神经⽹络识
别车牌字符
1. 关于OpenCV进阶之路
前段时间写过⼀些关于OpenCV基础知识⽅⾯的系列⽂章,主要内容是⾯向OpenCV初学者,介绍OpenCV中⼀些常⽤的函数的接⼝和调
⽤⽅法,相关的内容在OpenCV的⼿册⾥都有更详细的解释,当时⾃⼰也是边学边写,权当为⼀种笔记的形式,所以难免有浅尝辄⽌的感
觉,现在回头看来,很多地⽅描述上都存在不⾜,以后有时间,我会重新考虑每⼀篇⽂章,让成长系列对基础操作的介绍更加详细⼀些。
OpenCV进阶之路相⽐于成长系列,不会有太多的基础函数的介绍,相对来说会更偏向于⼯程实践,通过解决实际问题来说明某些较⾼级函
数的⽤法和注意事项,主要内容会集中在特征提取、机器学习和 ⽬标跟踪⼏个⽅向。所以这个系列⽂章知识点没有先后顺序之分,根据个⼈
平时⼯作学习中遇到的问题⽽定。
这篇⽂章主要介绍OpenCV中神经⽹络的⽤法,并通过车牌字符的识别来说明⼀些参数设置,函数调⽤顺序等,⽽关于神经⽹络的原理在博
客机器学习分类⾥已经详细的讲解与实现了,所以本⽂中就不多加说明。
2. 车牌字符识别
车牌识别是计算机视觉在实际⼯程中⼀个⾮常成功的应⽤,虽然现在技术相对来说已经成熟,但是围绕着车牌定位、车牌⼆值化、车牌字符
识别等⽅向,还是不时的有新的算法出现。通过学习车牌识别来提升 ⾃⼰在图像识别⽅⾯的⼯程经验是⾮常好的,因为它⾮常好的说明了计
算机视觉的⼀般过程 :
图像$\to$预处理$\to$图像分析$\to$⽬标提取$\to$⽬标识别
⽽整个车牌识别过程实际上相当于包含了两个上述过程 :1,是车牌的识别;2,车牌字符的识别。
这篇⽂章其实主要是想介绍OpenCV中神经⽹络的⽤法,⽽不是介绍车牌识别技术。所以我们主要讨论的内容集中在车牌字符的识别上,关
于定位、分割等不多加叙述叙述。
3. 字符特征提取
在深度学习(将特征提取作为训练的⼀部分)这个概念引⼊之前,⼀般在准备分类器进⾏识别之前都需要进⾏特征提取。因为⼀幅图像包含的
内容太多,有些信息能区分差异性,⽽有些信息却代表了共性。所以我们要进⾏适当的特征提取把它们之间的差异性特征提取出来。
这⾥⾯我们计算⼆种简单的字符特征 :梯度分布特征、灰度统计特征。这两个特征只是配合本篇⽂章来说明神经⽹络的普遍⽤法,实际中进
⾏字符识别需要考虑的字符特征远远要⽐这复杂,还包括相似字特征的选取等,也由于⼯作上的原因,这⼀部分并不深⼊的介绍。
1,⾸先是梯度分布特征,该特征计算图像⽔平⽅向和竖直⽅向的梯度图像,然后通过给梯度图像分划不同的区域,进⾏梯度图像每个区域
亮度值的统计,以下是算法步骤 :
1将字符由RGB转化为灰度,然后将图像归⼀化到 16*8。
2定义soble⽔平检测算⼦ :$x\_mask = [-1,0,1;-2,0,2; –1,0,1]$和竖直⽅向梯度检测算⼦$y\_mask=x\_mask^T$。
3对图像分别⽤$mask\_x$和$mask\_y$进⾏图像滤波得到$SobelX$和$SobelY$,下图分别代表原图像、$SobelX$和$SobelY$。
4对滤波后的图像,计算图像总的像素和,然后划分4*2的⽹络,计算每个⽹格内的像素值的总和。
5将每个⽹络内总灰度值占整个图像的百分⽐统计在⼀起写⼊⼀个向量,将两个⽅向各 ⾃得到的向量并在⼀起,组成特征向量。
1 void calcGradientFeat(const Mat imgSrc, vectorfeat)2 {3 float sumMatValue(const Mat image); //计算图像中像素灰度
值总和
4
5 Mat image;6 cvtColor(imgSrc,image,CV_BGR2GRAY);7 resize(image,image,Size(8,16));8
9 //计算x⽅向和y⽅向上的滤波
10 float mask[3][3] = { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1} };11
12 Mat y_mask = Mat(3, 3, CV_32F, mask) / 8;13 Mat x_mask = y_mask.t(); //转置
14 Mat sobelX, sobelY;15
16 filter2D(image, sobelX, CV_32F, x_mask);17 filter2D(image, sobelY, CV_32F, y_mask);18
19 sobelX =abs(sobelX);
文档评论(0)