NeVehicleLicensePlateRecognition
车牌识别C++项目
Install / Use
/learn @tianyalu/NeVehicleLicensePlateRecognitionREADME
车牌识别C++项目
[TOC]
一、车牌识别流程
车牌识别总体分为三步:车牌定位-->车牌检测-->车牌字符识别
1.1 车牌定位
车牌定位,即定位到车牌在图片中的位置区域。
本文使用了两种方式:sobel定位和颜色定位,最后综合两种方式实现定位。
1.1.1 sobel定位
sobel定位步骤如下:
- 高斯模糊
- 灰度化
Sobel运算 --> 16位转8位- 二值化
- 形态学操作(闭操作)
- 求轮廓
- 尺寸判断(初步过滤掉不符合要求的矩形)
- 矩形矫正(旋转角度、安全矩形处理、调整大小)
最后得到的是包含可能车牌的旋转后的矩形矩阵向量:vector<Mat>。
1.1.2 颜色定位
颜色定位步骤如下:
RGB颜色空间转换为HSV颜色空间HSV分离- 二值化(
V颜色空间)- 形态学操作(闭操作)
- 求轮廓
- 尺寸判断(初步过滤掉不符合要求的矩形)
- 矩形矫正(旋转角度、安全矩形处理、调整大小)
最后得到的是包含可能车牌的旋转后的矩形矩阵向量:vector<Mat>。
1.1.3 综合
将以上两种方式获取的集合综合到新的向量中:
vector<Mat> plates;//2合1的候选车牌集合
plates.insert(plates.end(), sobel_plates.begin(), sobel_plates.end());
plates.insert(plates.end(), color_plates.begin(), color_plates.end());
1.2 车牌检测
车牌检测是通过SVM支持向量机来做的,训练资料参考2.1。
识别步骤如下:
- 灰度化(对于1.1.3得到的数据)
- 二值化
- 提取
Hog特征- 将
Hog特征交给SVM测评得到结果
最终得到的结果是车牌矩形Mat。
1.3 车牌文字识别
车牌文字识别分为字母数字识别和汉字识别两种,本文是通过ANN神经网络做的,训练资料参考2.1。
1.3.1 字母数字识别
识别步骤如下:
- 灰度化(对于1.2得到的数据)
- 二值化
- 清除铆钉像素(行扫描、看跳变次数)
- 求字符轮廓
- 尺寸判断(初步过滤掉不符合要求的矩形)
- 排序(轮廓矩形x坐标从左到右)
- 获取城市字符框的索引(车牌矩形1/7 ~ 2/7位置)
- 获取轮廓矩形
Hog特征- 将城市字符框及其之后的5个矩形
Hog特征交给ANN测评,得到字符结果
1.3.2 汉字识别
由于汉字比较特殊,识别到的矩形未必包含整个字符,所以这里采取的是根据1.3.1得到的城市字符框索引,以其为基准,向左取稍微宽一点的矩形框,作为汉字的识别样本,步骤同1.3.1。

二、目录说明及参考资料
2.1 目录说明
svm_train目录下的是如何进行车牌识别训练的代码,resources/svm_train目录下是车牌识别的训练文件;
ann_train目录 下是如何进行字符识别训练的代码,resources/ann_train目录下是字符识别的训练文件。
2.2 参考资料
车牌定位资料,简书地址:Opencv 车牌定位相关资料
车牌检测资料,简书地址:OpenCV 车牌检测资料
