通过学习别人的程序,个人了解到车牌识别分为如下几个步骤:
1.读取一张车牌照片
2.将车牌照片转化成R、G、B、H、S、V分量
3.选取最合适的分量图像进行阈值分割(获取车牌在图像中的区域)
4.打开矩形区域
5.获取矩形区域
6.获取矩形区域的角度
7.获取矩形区域的中心点
8.求射频变换的矩阵(根据极轴方向确定旋转至0度还是180度)
9.旋转图像
10.从原图中抠取当前矩形区域
11.缩小图像区域
12.图像灰度化
13.由于Halcon自带字库为白底黑字,所以将图像灰度值翻转
14.阈值分割出文字区域
15.消除噪点
16.砍成不同区域
17.根据中心点坐标选取区域
18.根据面积选取区域
19.区域排序
20.选取Halcon自带字库
21.识别文字
22.显示原图
23显示字符
源码如下:
read_image (Image, \'C:/Users/58937/Desktop/t01099427dc105a338f.jpg\')
dev_close_window ()
dev_open_window (0, 0, 512, 512, \'black\', WindowHandle)
dev_display (Image)
decompose3 (Image, Red, Green, Blue)
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, \'hsv\')
threshold (Saturation, Regions, 182, 255)
opening_rectangle1 (Regions, RegionOpening, 6,6)
*因为是有角度的矩形所以用rectangle2
shape_trans (RegionOpening, RegionTrans, \'rectangle2\')
*区域的角度和中心点
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
*注意求解角度的极轴方向
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
*旋转,抠图,缩小
affine_trans_image (Image, ImageAffinTrans, HomMat2D, \'constant\', \'false\')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, \'nearest_neighbor\')
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
*字符分割
rgb1_to_gray (ImageReduced, GrayImage)
*翻转图像灰度值
invert_image (GrayImage, ImageInvert)
threshold (GrayImage, Regions1, 62, 255)
opening_rectangle1 (Regions1, RegionOpening1, 3,3)
*砍
connection (RegionOpening1, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions1, \'row\', \'and\', 108,119)
select_shape (SelectedRegions1, SelectedRegions, \'area\', \'and\', 80,99999)
*进行字符排序从左到右
sort_region (SelectedRegions, SortedRegions, \'first_point\', \'true\', \'column\')
*halcon自带字库
read_ocr_class_mlp (\'Industrial_0-9A-Z_NoRej.omc\', OCRHandle)
*识别
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
dev_display (Image)
disp_message (WindowHandle,Class, \'image\', 0, 0, \'red\', \'false\')