基于C++(QT)的车牌识别实现——车牌框选

拟采用的技术路线

本次设计计划以最快的速度实现一个清晰车牌的识别,后续再增加识别精确度,故采取以下技术路线本篇文章主要讲述图像二值化的实现。
打开图像->二值化->边沿检测->包络检测->提取轮廓->车牌识别

车牌框选方案

首先实现关于直线的检测,通过直线的检测最后判断是否能够相交组成矩形,然后选出最可能是车牌的矩形。
直线检测采用“Hough直线检测”的方案。
在前期我们已经采集到了以下图形,后续就是取出图形中的直线。在取出直线过程中,首先进行边沿点的取出,我们将边沿的颜色设置为红色,在检测直线时仅检测边沿是否属于直线。

边沿检测实现

在实现膨胀时,就已经对边沿进行了一定的检测,这次将膨胀时产生的点改为红色进行标记,同时将这些点存储起来,用于后续的直线检测。
在这里插入图片描述
将点位存在Hash表当中。

class CorAndExp
{
public:
    CorAndExp();
public:
    void corrosion(QImage*);//腐蚀
    void expansion(QImage*);//膨胀
    void addred(QImage*);//膨胀
    QHash <int,QPoint*> hash;
};

Hough直线检测实现

霍夫直线检测下面这位博主写的非常好
https://www.cnblogs.com/php-rearch/p/6760683.html
总的来说,就是通过空间变换得到的值的确定。
第一种是笛卡尔坐标系,为x,y。霍夫空间就是k,b。

当确定其中1个点时,可以有很多条直线经过这1点,如何用函数的形式将这些直线表示出来呢?就是霍夫空间可以表示。
霍夫空间以k,b为坐标,k,b也就是笛卡尔坐标当中用于表示直线的参数。
x1,y1确定之后,就可以在霍夫空间中做出一条直线,霍夫空间这条直线上的每一个点都可以看作是可以经过这个x1,y1这个点的笛卡尔坐标上的直线。
在这里插入图片描述
然后我们再给出3个点,判断一下这3个点是否能在1条直线上,因为霍夫空间中的每一个点都能表示一条直线,3个点能确定3条霍夫空间上的线,这3条线如果交与1点,说明会产生1条直线同时经过这3个点。
在这里插入图片描述
这就完成了笛卡尔坐标系下的霍夫变换。
但是这种情况无法表示垂直于x轴的直线,因为斜率无限大时,k无限大,无法在霍夫空间确定这一点的位置。
所以采用极坐标的表示方法,通过这种方法进行表示,就不会存在垂直与x轴的直线无法表示的情况。
在这里插入图片描述
那么代码实现流程是怎样的呢?
1、取图片中的n个点,表示为霍夫空间中的n条曲线。
2、对n条曲线,取所有的角度θ,得到ρ,将ρ相等的次数进行统计。
3、次数越多的,说明该条直线上的点越多,达到一定阈值,可证明这是一条直线。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔通天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值