Halcon学习笔记之OCR系列-车牌识别

守給你的承諾、 提交于 2021-01-10 11:39:52

车牌识别的第一步就是先随便在路边上找一辆车,把他的车牌号拍下来留作图像处理的图片。
为了保护隐私,只露出后面部分。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210107152909995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDUwNjMwNQ==,size_16,color_FFFFFF,t_70)

下面便是图像处理的过程:

read_image (Image, 'C:/Users/Administrator/Desktop/dsBuffer.bmp.png')
*将彩色图片通过三通道分成三张图片,筛选对比效果最好的图片
*当然在现实应用中能用灰度相机拍的话没有必要用彩色相机,一般用到彩色相机了都是需要检测颜色相关的内容
decompose3 (Image, R, G, B)
*或者直接转成灰度图也可以,对于彩色图片两种都试一下,主要看效果
rgb1_to_gray (Image, GrayImage)

R通道的对应的图片:
在这里插入图片描述
直接转成灰度图片的效果:
在这里插入图片描述
显而易见,R通道的图像对比度更高,所以我们接下来选用R通道的图像来进行OCR提取识别。



*对比效果R通道的图像对比效果最好,接下来就是用R通道的图像提取识别OCR
dev_display (R)
*接下来就是抠图,可以直接框选ROI区域,也可以通过预处理得到OCR区域,下面我就是用预处理的方法来获取
fast_threshold (R, Region, 150, 255, 30)
connection (Region, ConnectedRegions)
*通过层层条件限制选出我们想要的OCR区域
select_shape (ConnectedRegions, SelectedRegions, ['width','area','height'], 'and', [68.43,2826.65,137.45], [200.01,10000,500])
union1 (SelectedRegions, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')
area_center (RegionTrans, Area, Row, Column)
orientation_region (RegionTrans, Phi)
*求出区域的方向后,需要根据Phi的绝对值是靠近0还是3.14,来决定Angle2这个值是填rad(0)还是rad(180)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image (R, ImageAffinTrans, HomMat2D, 'constant', 'false')
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
*由于halcon支持的ocr识别是需要将字体转正,不能偏斜,而且要满足白底黑字的情况下才能识别,所以我们需要将图像反转一下
invert_image (ImageReduced, ImageInvert)
threshold (ImageInvert, Region1, 0, 90)
connection (Region1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 4340.23, 10000)
*得到OCR区域后,开始读取ocr,由于这张图的拍摄角度有点问题,所以4和R字符明显还是处于斜着的状态
*但是读取的结果还行,只有4读取错误,其他的都是正确的,当然我们也可以把每个字都分割出来单独矫正
*位置,一个for循环的事情,可以自己私下去试试,主要这个就是一般的OCR识别的步骤。
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SelectedRegions1, ImageInvert, OCRHandle, Class, Confidence)

抠出来的以及反转的图像:
在这里插入图片描述
在这里插入图片描述

下面就是一些将读取结果显示在图像窗口的小事了,就懒得写了,处理出来的结果显示:
在这里插入图片描述
主要的来说,对于这种字体不粘连,很清晰的情况下,大致的OCR识别方法大致就是这样,那么当我们遇到一些字体提取出来有粘连的情况,或者一些喷涂字样的字体,我们需要特殊的处理方式,下面我会继续写出来。如果遇到halcon中的字库识别不出来的字体,那么就是自己训练了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!