如何用OpenCV实现车牌字符的精确分割?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2103个文字,预计阅读时间需要9分钟。
之前的车牌定位已获取车牌位置,并对车牌进行了提取。我们的最终目标是进行车牌识别,在此之前需要将字符进行分割,方便对每个字符进行识别,最后将其拼接。
之前的车牌定位中已经获取到了车牌的位置,并且对车牌进行了提取。我们最终的目的是进行车牌识别,在这之前需要将字符进行分割,方便对每一个字符进行识别,最后将其拼接后便是完整的车牌号码。关于车牌定位可以看这篇文章: OpenCV车牌定位(C++) ,本文使用的图片也是来自这里。
先来看一看原图:
最左边的汉字本来是 沪,截取时只获得了右边一点点的部分,这与原图和获取方法都有关,对于 川、沪… 这一类左右分开的字会经常发生这类问题,对方法进行优化后可以解决,这里暂时不进行讨论。
后面的字都是完整的,字符分割的过程不会受影响。首先来一波常规操作,为了更方便处理,将其变成灰度图片:
分割的方法不止一种,最简单的就是多加点人工成分,按照大致宽度再微调进行截取,但是这样看似最快其实成本最高,只适用于单一的图片,因此这种容错低且不够自动的方法就不考虑了。
目前我使用了两种不同的方法,一种是进行边缘检测再检测轮廓,根据字符的轮廓特点筛选出字符;另一种就是像素值判断,主要根据像素数量使用水平映射截取宽度,垂直映射因为高度基本一致就不需要了,方法于水平映射一样。
两种方法我都写在后面,根据需要自行复制。如果要使用像素值进行判断的话,就需要再将灰度图转换成二值化图片,使用阈值分割就行了。若使用第一种用轮廓分割的方法,灰度图和二值化图片都可以,结果没什么区别。
本文共计2103个文字,预计阅读时间需要9分钟。
之前的车牌定位已获取车牌位置,并对车牌进行了提取。我们的最终目标是进行车牌识别,在此之前需要将字符进行分割,方便对每个字符进行识别,最后将其拼接。
之前的车牌定位中已经获取到了车牌的位置,并且对车牌进行了提取。我们最终的目的是进行车牌识别,在这之前需要将字符进行分割,方便对每一个字符进行识别,最后将其拼接后便是完整的车牌号码。关于车牌定位可以看这篇文章: OpenCV车牌定位(C++) ,本文使用的图片也是来自这里。
先来看一看原图:
最左边的汉字本来是 沪,截取时只获得了右边一点点的部分,这与原图和获取方法都有关,对于 川、沪… 这一类左右分开的字会经常发生这类问题,对方法进行优化后可以解决,这里暂时不进行讨论。
后面的字都是完整的,字符分割的过程不会受影响。首先来一波常规操作,为了更方便处理,将其变成灰度图片:
分割的方法不止一种,最简单的就是多加点人工成分,按照大致宽度再微调进行截取,但是这样看似最快其实成本最高,只适用于单一的图片,因此这种容错低且不够自动的方法就不考虑了。
目前我使用了两种不同的方法,一种是进行边缘检测再检测轮廓,根据字符的轮廓特点筛选出字符;另一种就是像素值判断,主要根据像素数量使用水平映射截取宽度,垂直映射因为高度基本一致就不需要了,方法于水平映射一样。
两种方法我都写在后面,根据需要自行复制。如果要使用像素值进行判断的话,就需要再将灰度图转换成二值化图片,使用阈值分割就行了。若使用第一种用轮廓分割的方法,灰度图和二值化图片都可以,结果没什么区别。

