智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: hgdyyzw
打印 上一主题 下一主题

十字路口的拐点

[复制链接]

11

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
550
威望
279
贡献
149
兑换币
168
注册时间
2015-11-18
在线时间
61 小时
毕业学校
重庆大学
11#
 楼主| 发表于 2016-5-30 10:29:30 | 只看该作者
斯特凡 发表于 2016-5-27 13:39
昨天晚上睡不着一直想这个问题来着,想了一晚上终于找到了一个可行的方法,当你遇到拐点的时候,左右线肯定 ...

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

18

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2546
QQ
威望
1899
贡献
11
兑换币
1171
注册时间
2015-7-23
在线时间
318 小时
12#
发表于 2016-5-30 15:17:28 | 只看该作者
:D第一,撞头像了
其次,诚求十字方案,补线太糟糕,加上黑三角就更不用说了
回复 支持 反对

使用道具 举报

20

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1634
威望
828
贡献
432
兑换币
509
注册时间
2015-10-20
在线时间
187 小时
13#
发表于 2016-5-31 13:17:31 | 只看该作者

模拟摄像头?  多少度的镜头啊
回复 支持 反对

使用道具 举报

13

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
398
威望
213
贡献
101
兑换币
117
注册时间
2017-2-8
在线时间
42 小时
14#
发表于 2017-5-20 19:23:06 | 只看该作者
hgdyyzw 发表于 2016-5-30 10:29
这个是直入十字,斜入呢?我感觉是左右必有一个拐点,此拐点可以通过斜率来验证,如图中,斜着的时候,通 ...

可以看看你十字处理的代码吗?谢谢啦
回复 支持 1 反对 0

使用道具 举报

13

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
398
威望
213
贡献
101
兑换币
117
注册时间
2017-2-8
在线时间
42 小时
15#
发表于 2017-5-20 19:24:06 | 只看该作者
hgdyyzw 发表于 2016-5-30 10:29
这个是直入十字,斜入呢?我感觉是左右必有一个拐点,此拐点可以通过斜率来验证,如图中,斜着的时候,通 ...

qq2430990510
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
威望
143
贡献
100
兑换币
93
注册时间
2019-12-18
在线时间
0 小时
16#
发表于 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-11-5 17:30 , Processed in 0.104403 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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