基于C++(QT)的车牌识别实现——腐蚀与膨胀

拟采用的技术路线

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

腐蚀的实现

二值化完成之后,需要进行边沿检测,边沿检测之前需要对一些无用的点进行腐蚀,将无用的噪点给删除掉。
删除的原理则是通过8邻域取色素,进行处理。
以下实现了腐蚀功能,具体原理是通过窗口进行扫描,每一个点都会检测附近是否有黑点,如果有,则保留该黑点,如果没有则删除该黑点,能够清除掉小型的黑点,也就是去噪。

#define kernel_x 3
#define kernel_y 3
void CorAndExp::corrosion(QImage *m_qimg)//腐蚀实现
{
    QColor pix;
    int count;
    QHash <int,QPoint*> hash;
    QPoint* tmp_point;
    int red_value=1;
    for (int x=kernel_x;x<m_qimg->width()-kernel_x;x++) {
        for(int y=kernel_y;y<m_qimg->height()-kernel_y;y++){
            int grey=qGray(m_qimg->pixel(x,y));//获取当前坐标的灰度值
            red_value=1;
            if(grey==0){
//                m_qimg->setPixel(x,y,qRgb(0,255,0));
                //对像素点的8邻域进行处理
                //8邻域中有任何一个点是0色,当前像素都应该是0色
                for(int i=-1;i<kernel_x;i++){
                    for(int j=-1;j<kernel_y;j++){
                        int tmp_grey=qGray(m_qimg->pixel(x+i,y+j));
                        if(tmp_grey==255){
                            count++;
                            tmp_point=new QPoint(x,y);
                            hash.insert(count,tmp_point);
                            //m_qimg->setPixel(x,y,qRgb(0,0,0));
                            red_value=0;
                            break;
                        }
                    }
                    if(red_value==0)
                        break;
                }
            }
        }
    }
    foreach (QPoint* a,hash)
    {
        m_qimg->setPixel(*a,qRgb(255,255,255));
        delete  a;
    }
}

膨胀的实现

void CorAndExp::expansion(QImage *m_qimg)
{
    QColor pix;
    int count;
    QHash <int,QPoint*> hash;
    QPoint* tmp_point;
    int red_value=1;
    for (int x=kernel_x;x<m_qimg->width()-kernel_x;x++) {
        for(int y=kernel_y;y<m_qimg->height()-kernel_y;y++){
            int grey=qGray(m_qimg->pixel(x,y));//获取当前坐标的灰度值
            red_value=1;
            if(grey==255){
//                m_qimg->setPixel(x,y,qRgb(0,255,0));
                //对像素点的8邻域进行处理
                for(int i=-1;i<kernel_x;i++){
                    for(int j=-1;j<kernel_y;j++){
                        int tmp_grey=qGray(m_qimg->pixel(x+i,y+j));
                        if(tmp_grey==0){
                            count++;
                            tmp_point=new QPoint(x,y);
                            hash.insert(count,tmp_point);
                            //m_qimg->setPixel(x,y,qRgb(0,0,0));
                            red_value=0;
                            break;
                        }
                    }
                    if(red_value==0)
                        break;
                }
            }
        }
    }
    foreach (QPoint* a,hash)
    {
        m_qimg->setPixel(*a,qRgb(0,0,0));
        delete  a;
    }
}

处理前后对比

二值化:
在这里插入图片描述
腐蚀后:
在这里插入图片描述
膨胀后:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

塔通天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值