智能车制作

标题: 摄像头提取黑线 [打印本页]

作者: moonlight831    时间: 2012-3-2 22:16
标题: 摄像头提取黑线
关于黑线提取,怎么样从中间开始检测呢?
作者: zengjimin    时间: 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(void){           //白线提取程序
  int i,j1,j2;
  int br,bl;
   
  for(i=0;i<40;i++)
  {
   
    br=120*i;
    bl=120*(i+1);
    for(j1=60+br;j1<bl-3;j1++)         //从中间往左边扫描找左边缘
    {
       if((image[j1]>image[j1+2]+yuzhi)&&(image[j1]>image[j1+3]+yuzhi))
       {
          fall_edge=1;
          left_edge=j1-br;
       }
    }
    for(j2=60+br;j2>br+3;j2--)         //从中间往右边扫描找右边缘
    {
       if((image[j2]>image[j2-2]+yuzhi)&&(image[j2]>image[j2-3]+yuzhi))
       {
          rise_edge=1;
          right_edge=j2-br;
       }
    }
    if(fall_edge==1&&rise_edge==1)              //找到左右边缘
    {
       if((left_edge-right_edge)>(100-2.5*i))      //白线宽度限制
       {
         center_line[i]=(right_edge+left_edge)>>1;        //求中点坐标
         exact=1;
       }
    }
    if(fall_edge==0&&rise_edge==1)               //找到右边缘,没有找到左边缘,左转弯
    {
       center_line[i]=(right_edge+120)>>1;
       exact=1;
    }
    if(fall_edge==1&&rise_edge==0)         //找到左边缘,没有找到右边缘,右转弯
    {
       center_line[i]=(left_edge+(i-10))>>1;
       exact=1;
    }
    if(fall_edge==0&&rise_edge==0)                                //没有找到左右边缘
    {
       exact=0;
       rise_edge=0;fall_edge=0;
       right_edge=0;left_edge=0;
    }
    if(exact==0&&i>10) center_line[i]=0;
  
    exact=0;                        //找下一行白线前清除所有信号
    rise_edge=0;fall_edge=0;
    left_edge=0;right_edge=0;
  }  
}

作者: 易枫    时间: 2012-3-3 11:27

作者: zhaoqibin123    时间: 2012-3-4 21:27

作者: moonlight831    时间: 2012-3-4 21:40
易枫 发表于 2012-3-3 11:27

问得很白痴,是么- -

作者: moonlight831    时间: 2012-3-4 21:41
zhaoqibin123 发表于 2012-3-4 21:27

。。。。。。。求帮忙。。。。
作者: zhaoqibin123    时间: 2012-3-4 21:52
moonlight831 发表于 2012-3-4 21:41
。。。。。。。求帮忙。。。。

中间找可以实现,关键是有时候看到一条黑线,或者一边完整一边残缺,不好处理啊

作者: 摄像头组菜鸟    时间: 2012-3-4 22:14
这个不难吧
作者: moonlight831    时间: 2012-3-5 08:09
zhaoqibin123 发表于 2012-3-4 21:52
中间找可以实现,关键是有时候看到一条黑线,或者一边完整一边残缺,不好处理啊

那你是从左到右的么?
作者: moonlight831    时间: 2012-3-5 08:10
摄像头组菜鸟 发表于 2012-3-4 22:14
这个不难吧

那怎么实现呢?咳咳。求求大神
作者: qjh690623    时间: 2012-3-5 09:32
我也想知道

作者: `美好时光    时间: 2012-3-5 11:07
就从中间往两边检测,找到的第一个黑点就当做是边界,等到取得多组数据之后进行分析,排除和纠正一些错误的点。
作者: 摄像头组菜鸟    时间: 2012-3-6 12:24
moonlight831 发表于 2012-3-5 08:10
那怎么实现呢?咳咳。求求大神

从左到右顺寻找就行了啊

作者: 风花雪月    时间: 2012-3-6 13:37
呵呵,太直接了~~
作者: moonlight831    时间: 2012-3-6 14:11
摄像头组菜鸟 发表于 2012-3-6 12:24
从左到右顺寻找就行了啊

还是决定边缘检测了,谢谢,啊
作者: moonlight831    时间: 2012-3-6 14:12
风花雪月 发表于 2012-3-6 13:37
呵呵,太直接了~~

哈哈哈哈,我菜鸟一个

作者: moonlight831    时间: 2012-3-6 14:12
`美好时光 发表于 2012-3-5 11:07
就从中间往两边检测,找到的第一个黑点就当做是边界,等到取得多组数据之后进行分析,排除和纠正一些错误的 ...

ok,3q
作者: 寂寞小呆    时间: 2012-3-8 16:32
同求。。
作者: 摄像头组菜鸟    时间: 2012-3-9 12:16
moonlight831 发表于 2012-3-6 14:11
还是决定边缘检测了,谢谢,啊

客气

作者: cqu_cj    时间: 2012-3-9 23:53
首先,你要从靠车头最近的一行由近及远开始处理,这样你从中间往两边找,总能找到黑线;后面的行就以前面一行为基准,在前一行黑线附近的几个点搜索黑线,以此类推!


作者: chinasunjia123    时间: 2012-3-10 11:20
这个很好解决的呀。。。
作者: zd12    时间: 2012-3-10 14:23
楼猪,,,我顶
作者: qiyixi    时间: 2012-3-12 20:34
同求,如何从中间开始?
作者: chenkai    时间: 2012-3-12 21:04
我非常想知道
作者: qiyixi    时间: 2012-3-15 19:38
可以直接从中间提取啊,原先不是从左向右嘛,现在不要从左至右,起始的时候设为中间位置就可以了,或者也可以什么读不管,直接偏移也可以试一试,我们刚刚开始,正在尝试这几个方法,加油吧~~~
作者: qiyixi    时间: 2012-3-15 19:39
想问问24楼的,速度怎么样,小车跑起来了么
作者: dhyyag    时间: 2012-3-19 17:43
我也想知道
作者: qjh690623    时间: 2012-3-22 20:56
难啊,难啊....
作者: 象牙塔    时间: 2012-3-25 16:08

作者: nc2367334102    时间: 2012-3-26 17:15
还不错。
作者: VLEA    时间: 2012-4-2 09:24
要是没找到左右边缘呢
作者: xiazeyang1008    时间: 2012-4-20 18:49
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

白线宽度那是什么意思啊?能具体解释下吗

作者: dongpinbo    时间: 2012-4-20 20:33
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

兄弟,问一下,你的br ,bl各乘以120什么意思?

作者: dongpinbo    时间: 2012-4-20 20:39
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

请问一下,你的br bl什么意思?
作者: xiazeyang1008    时间: 2012-4-22 22:18
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

能答疑下吗?

作者: baobao    时间: 2012-4-24 18:13

作者: czrushman    时间: 2012-5-10 01:27
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

地板的颜色对你的程序影响大不大?

作者: jiangbo    时间: 2012-5-10 06:02
:)
作者: 我爱你啊    时间: 2012-5-10 09:45
你的头像好猥琐,楼主
作者: xinmengwangran    时间: 2012-5-10 09:57
学习一下!
作者: 2009gxs    时间: 2012-5-10 14:30
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

LZ的这个程序能跑不 左转右转的思路虽说是对的 但是。。缺少一个量化的指标
作者: moonlight831    时间: 2012-5-11 22:19
我爱你啊 发表于 2012-5-10 09:45
你的头像好猥琐,楼主

哈哈
作者: 32497852    时间: 2012-5-18 12:51
moonlight831 发表于 2012-3-5 08:10
那怎么实现呢?咳咳。求求大神

用动态前瞻,就可以解决了!!
作者: xinmengwangran    时间: 2012-5-18 15:26
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

好方法 试一下 呵呵

作者: 我爱学习    时间: 2012-6-6 22:17
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

如果在线看到此贴后,望回


for(j1=60+br;j1<bl-3;j1++)         //从中间往左边扫描找左边缘
    {
       if((image[j1]>image[j1+2]+yuzhi)&&(image[j1]>image[j1+3]+yuzhi))
       {
          fall_edge=1;
          left_edge=j1-br;
       }
    }


为什么不用break?嫩不能用啊

for(j1=60+br;j1<bl-3;j1++)         //从中间往左边扫描找左边缘
    {
       if((image[j1]>image[j1+2]+yuzhi)&&(image[j1]>image[j1+3]+yuzhi))
       {
          fall_edge=1;
          left_edge=j1-br;
          break;
       }
    }


作者: 我爱学习    时间: 2012-6-6 22:35
dongpinbo 发表于 2012-4-20 20:33
兄弟,问一下,你的br ,bl各乘以120什么意思?

亲  这个现在你看懂没有  ,我还是没有看懂  如果看懂了讲解下
作者: mxj1005071012    时间: 2013-1-21 22:07
摄像头组菜鸟 发表于 2012-3-4 22:14
这个不难吧

要高效简单的程序啊 你有吗 我搞4天了 总是有问题 谢了 891876745@qq.com

作者: 林的0922    时间: 2013-3-14 18:54
:)
作者: 林的0922    时间: 2013-3-21 19:31
:)
作者: 林的0922    时间: 2013-4-1 16:16
学习

作者: 林的0922    时间: 2013-4-1 20:36

作者: 林的0922    时间: 2013-4-1 20:40
zengjimin 发表于 2012-3-2 22:16
简单的很,我的程序就是从中间提取黑白跳变的,只不过是列数多使用一个变量罢了。
void Get_whiteline(voi ...

你采图像 的大小是多少

作者: .丶Forヾ    时间: 2013-4-1 22:58
冲中间往两边找,弯道的时候是丢失了一边的,是怎么解决的?
作者: 忧天杞人    时间: 2013-4-2 16:02
猜想可以,根据图像的宽度进行补线,不过感觉补一整条边界的话比较难,现在如果丢边界的话,采用一边边界为最小值或最大值,感觉误差不是很大




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