智能车扫线——斑马线识别

对斑马线的识别分为3补: 1.计算斑马线黑色色块的宽度。

                                          2.计算一行中斑马线黑色色块的个数。

                                          3.计算一共有几行的斑马线。a342d659a53240c981a2f7071fa02238.jpeg

aa950ee428d14f18bfbe79de81ee7bbf.png

 

 步骤:如果黑色色块的宽度为4~8,则认为这一个色块有效,色块个数+1.色块宽度计算方法:从左向右扫描到第一个黑色边缘从此点开始计数,向左扫描第一个白色点并记录,最后用黑色点坐标减去百色点坐标就得到黑色块的宽度了。

接下来重复步骤扫描其他色块,每扫描到一个我们认为有效的色块(即黑色色块的宽度为4~8),色块个数加一,直到把这一行的色块个数都扫完,再去扫上一行。如果有大于等于4行的满足个数的黑色块,则认为找到了斑马线。

接下来上代码:

//判断斑马线函数
void banmaxian(int start_point, int end_point)
{
        //变量标志位
        int banmaxian_kuandu;//斑马线宽度
        int banmaxian_hangshu;//斑马线行数
        int banmaxian_geshu;//斑马线个数(块)
        //从下往上扫描
        for (int y = end_point; y >= start_point; y--)
        {
             banmaxian_kuandu=0;
             banmaxian_hangshu=0;
             banmaxian_geshu=0;
             //从右往左扫描
            for (int x =170; x >=30; x--)
            {
                int baidian_heng=0;
                //扫描到黑色,就进判断
                if (mt9v03x_image1[y][x] == 0)
                {
                    for(int a=x;x<x+15;x++)//从黑色点向左侧扫描
                    {
                        //找到白色点
                        if(mt9v03x_image1[y][a] == 255)
                        {
                            //记录白色点的位置,跳出循环
                            baidian_heng=a;
                            break;
                        }
                    }//斑马线宽度等于黑白点的差
                    banmaxian_kuandu=x-baidian_heng;


                }
                else
                {   //斑马线的宽度在4~8之间认为它成立为斑马线黑色块
                    if (banmaxian_kuandu >= 4 && banmaxian_kuandu <= 8)
                    {
                        //斑马线黑色块++
                        banmaxian_geshu++;
                        //斑马线色块宽度清零,进行下一个黑色块的扫描计算
                        banmaxian_kuandu = 0;
                    }
                    else
                    {
                        //如果不满足对黑色块的认为要求就直接清零,去计算下一个黑色块
                        banmaxian_kuandu = 0;
                    }
                }
            }
            //如果色块的个数在6~9之间则认为这一行的斑马线满足要求,在去扫下一行
            if (banmaxian_geshu >= 6 && banmaxian_geshu <= 9){banmaxian_hangshu++;}
        }
        //如果有大于等于4行的有效斑马线
        if(banmaxian_hangshu>=4)
        {
            //斑马线标准位置1
            banmaxian_biaozhiwei=1;
        }
        else{banmaxian_biaozhiwei=0;}

}

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-chu_kuang-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值