基于OpenCV的车牌识别(1. 车牌图像识别)

本文和下文用于开源项目OpenCV的车牌识别的学习!!!

车牌识别的过程可分为四步:1)车牌图像切割;2)车牌图像分类;3)车牌字符切割;4)车牌字符分类;

1)车牌图像切割: 

a.将原图转化为灰度图,可去除多通道产生的外界噪声;

b. sobel滤波 ,车牌分割的一个重要特征是车牌中的垂直边缘比较多,为了提取垂直边缘,采用sobel一阶垂直方向导数;

c. 阈值化处理,应用一个OSTU法自动获取阈值滤波器来获得一个二值图像;

d. 闭运算形态学 ,连接含有边缘数量很多的所有区域,删除边缘之间的空白区域,将车牌区域连接起来;

e. 漫水填充, 所有的车牌都有统一的背景颜色。使用漫水填充算法来获取旋转矩阵的精确修剪。漫水填充函数用颜色把连通区域填充到掩码图像,填充从种子开始。填充的像素点都是与种子点进行比较,如果像素值为x,seed-low<=x<=seed+up,则该位置将被填充。一旦得到了用来剪切的掩码图像,进而可得到掩码图像点的最小外接矩形,再次检查矩形大小。对于每一个掩码,白色像素获得位置用minAreaRect函数重新得到最相近的修剪区域;

f. 仿射变换,用来去掉检测矩形区域的旋转;

g. 提取矩形;

h. 调整为统一大小,直方图均衡化,提取的矩形图像不能很好的在训练和分类中使用,因为他们没有相同的大小。并且,每个图像包含不同的光照条件,增加了他们之间的差别。

/* imageSlicer.cpp */
#include <iostream>
#include <opencv2/opencv.hpp>
#include <time.h>

using namespace std;
using namespace cv;

//筛选旋转矩形的面积和宽高比
bool areaDetection(RotatedRect rectArea)
{
	float error = 0.4;//允许错误率
	const float width_height = 4.7272;//获得西班牙车牌的宽高比 57200

	int min_area = 25 * 25 * width_height;//获得允许矩形的最大最小面积
	int max_area = 100 * 100 * width_height;

	float min_value = width_height*(1 - error);//获得允许矩形的最大最小宽高比 1.890-6.6180
	float max_value &#
  • 8
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值