智能车制作

标题: 十字路口的拐点 [打印本页]

作者: hgdyyzw    时间: 2016-5-26 18:48
标题: 十字路口的拐点
手工画的图,大家识别拐点1时是根据边a和边b上某点与拐点横坐标的差的正负来的吗?那问题来了,如何把边a和边b识别出来并放到一个数组里?(看边a也是斜向上的奥,如果从图像最下一行往上搜索,边b可以搜索到,但边a呢?)


作者: hgdyyzw    时间: 2016-5-26 18:53
望各位前辈不吝赐教,在这先谢过了

作者: hgdyyzw    时间: 2016-5-26 18:55
hgdyyzw 发表于 2016-5-26 18:53
望各位前辈不吝赐教,在这先谢过了

顶顶更舒服

作者: miaobrother    时间: 2016-5-26 19:17
1算拐点么,如果你是用的逐行找边线,上面的你都找不到了才对吧
作者: hgdyyzw    时间: 2016-5-26 19:24
miaobrother 发表于 2016-5-26 19:17
1算拐点么,如果你是用的逐行找边线,上面的你都找不到了才对吧

额,这幅图学长会怎么处理?我是逐行的,但明显a边搜索不到


作者: miaobrother    时间: 2016-5-26 20:53
hgdyyzw 发表于 2016-5-26 19:24
额,这幅图学长会怎么处理?我是逐行的,但明显a边搜索不到

你咋就知道我是学长嘞?  这个角找不到 但是对面的找得到啊

作者: 斯特凡    时间: 2016-5-27 13:39
昨天晚上睡不着一直想这个问题来着,想了一晚上终于找到了一个可行的方法,当你遇到拐点的时候,左右线肯定都是能够找到的,你可以利用搜到的赛道宽度进行判断,强制往反方向打角
作者: 萌小凡    时间: 2016-5-30 01:05
你是指这样的吗
作者: hgdyyzw    时间: 2016-5-30 10:21
萌小凡 发表于 2016-5-30 01:05
你是指这样的吗

对!

作者: hgdyyzw    时间: 2016-5-30 10:22
miaobrother 发表于 2016-5-26 20:53
你咋就知道我是学长嘞?  这个角找不到 但是对面的找得到啊

看你学术搞得扎实

作者: hgdyyzw    时间: 2016-5-30 10:29
斯特凡 发表于 2016-5-27 13:39
昨天晚上睡不着一直想这个问题来着,想了一晚上终于找到了一个可行的方法,当你遇到拐点的时候,左右线肯定 ...

这个是直入十字,斜入呢?我感觉是左右必有一个拐点,此拐点可以通过斜率来验证,如图中,斜着的时候,通过逐行扫描时候,拐点1的a边也许检测不到,但拐点2的b边一定检测的到,然后通过斜率验证得到2是拐点,得到十字路口的判断


作者: 残虹断梦    时间: 2016-5-30 15:17
:D第一,撞头像了
其次,诚求十字方案,补线太糟糕,加上黑三角就更不用说了
作者: miaobrother    时间: 2016-5-31 13:17
萌小凡 发表于 2016-5-30 01:05
你是指这样的吗

模拟摄像头?  多少度的镜头啊
作者: 夏沫Shannon    时间: 2017-5-20 19:23
hgdyyzw 发表于 2016-5-30 10:29
这个是直入十字,斜入呢?我感觉是左右必有一个拐点,此拐点可以通过斜率来验证,如图中,斜着的时候,通 ...

可以看看你十字处理的代码吗?谢谢啦

作者: 夏沫Shannon    时间: 2017-5-20 19:24
hgdyyzw 发表于 2016-5-30 10:29
这个是直入十字,斜入呢?我感觉是左右必有一个拐点,此拐点可以通过斜率来验证,如图中,斜着的时候,通 ...

qq2430990510

作者: 永浩·奥迪托雷    时间: 2020-2-11 15:06
一遇到复杂点的十字图像就出问题,判断不出十字来,我想的是左线两个拐点右线两个拐点找,根据这个判断十字,原本的代码就只在左右找了一个拐点,至于找拐点的方式,我是判断十字边线的斜率乘积为负数或者为零来的(ABS是取绝对值)
for(row = 115;row >=5 ; row --)
            {
                if(((Lline[row]-Lline[row-4])*(Lline[row+4]-Lline[row]))<0)//找左拐点的方法
                {
                    if(Lline[row]==0)continue;
                    if(l_cross_turn_point == 0)
                    {
                        l_cross_turn_point = row-3;
                        if(ABS(Lline[l_cross_turn_point-2]-Lline[l_cross_turn_point])>30)//区分跳变点
                        {
                            l_cross_turn_point = 0;
                        }
                        break;      //找到拐点跳出循环
                    }
                }
            }
            for(row = 115;row >= 5 ; row --)
            {
                if(((Rline[row]-Rline[row-4])*(Rline[row+4]-Rline[row]))<0)//找右拐点的方法
                {
                    if(Rline[row]==159)continue;
                    if(r_cross_turn_point == 0)
                    {
                        r_cross_turn_point = row-3;
                        if(ABS(Rline[r_cross_turn_point-2]-Rline[r_cross_turn_point])>30)//区分跳变点
                        {
                            r_cross_turn_point = 0;
                        }
                        break;      //找到拐点跳出循环
                    }
                }
            }

同样的意思,我想再找两个十字上拐点,就又加了几行代码
           for(row = 115;row >=5 ; row --)
            {
                if(l_cross_count>=2)  break ;
                if(((Lline[row]-Lline[row-4])*(Lline[row+4]-Lline[row]))<0)//找左拐点的方法
                {
                    if(Lline[row]==0)continue;
                    if(l_cross_turn_point[l_cross_count] == 0)
                    {
                        l_cross_turn_point[l_cross_count] = row-3;
                        if(ABS(Lline[l_cross_turn_point[l_cross_count]-2]-Lline[l_cross_turn_point[l_cross_count]])>30)//区分跳变点
                        {
                            l_cross_turn_point[l_cross_count] = 0;
                            l_cross_count-- ;
                        }
                        l_cross_count++ ;
                    }
                }
            }
            for(row = 115;row >= 5 ; row --)
            {
                if(l_cross_count>=2)  break ;
                if(((Rline[row]-Rline[row-4])*(Rline[row+4]-Rline[row]))<0)//找右拐点的方法
                {
                    if(Rline[row]==159)continue;
                    if(r_cross_turn_point[r_cross_count] == 0)
                    {
                        r_cross_turn_point[r_cross_count] = row-3;
                        if(ABS(Rline[r_cross_turn_point[r_cross_count]-2]-Rline[r_cross_turn_point[r_cross_count]])>30)//区分跳变点
                        {
                            r_cross_turn_point[r_cross_count] = 0;
                            r_cross_count--;
                        }
                        r_cross_count++ ;
                    }
                }
            }

但是输出的结果不尽如人意,还望众大佬指点





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2