智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: hgdyyzw
打印 上一主题 下一主题

十字路口的拐点

[复制链接]

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
威望
143
贡献
100
兑换币
93
注册时间
2019-12-18
在线时间
0 小时
1#
发表于 2020-2-11 15:06:46 | 显示全部楼层
一遇到复杂点的十字图像就出问题,判断不出十字来,我想的是左线两个拐点右线两个拐点找,根据这个判断十字,原本的代码就只在左右找了一个拐点,至于找拐点的方式,我是判断十字边线的斜率乘积为负数或者为零来的(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++ ;
                    }
                }
            }

但是输出的结果不尽如人意,还望众大佬指点
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-6 14:19 , Processed in 0.133958 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表