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