智能车制作

标题: 车子能跑双线,求助找单线?前两行提取代码贴出,问能不能兼容单双线? [打印本页]

作者: 张云月    时间: 2015-4-13 18:40
标题: 车子能跑双线,求助找单线?前两行提取代码贴出,问能不能兼容单双线?
//计算前2行的左右边缘
    for(i=DATALINE-1;i>DATALINE-3;i--)
  {
   // for(j=(DATACOUNT/2-40);j<(DATACOUNT-1);j++)//计算前2行右边界  起始点靠左一点        011(白黑黑)
       for(j=(DATACOUNT/2-10);j<DATACOUNT-1;j++)
    {
       if(ImageBuf2[i][j-1]==0&&ImageBuf2[i][j]==1&&ImageBuf2[i][j+1]==1&&blackright[i]==DATACOUNT)//省掉break,
       {
         blackright[i]=j;
         break; //这一行是4月1号晚添加
       }
    }
    for(m=(DATACOUNT/2+10);m>0;m--) //计算前2行左边界  起始点靠右一点    110(黑黑白)
    {
      if(ImageBuf2[i][m-1]==1&&ImageBuf2[i][m]==1&&ImageBuf2[i][m+1]==0&&blackleft[i]==0)//省掉break,
      {
        blackleft[i]=m;
        break; //这一行是4月1号晚添加
      }
    }
   
   
    if((blackright[i]-blackleft[i])>(bxiankuan[i]*2-2)||(blackright[i]-blackleft[i])<(bxiankuan[i]*2-20))
   {
        for(i=DATALINE-1;i>DATALINE-3;i--)
    {
          for(j=0;j<DATACOUNT;j++)
              {
               if(ImageBuf2[i][j]==1)//如果是黑点
                  {
                       row_black=j;//记录该行第一个黑点的位置
                      for(j=j+1;j<DATACOUNT;j++)//继续对下一列进行判断  
                          {
                          if(ImageBuf2[i][j]==0)//如果是白点
                                {
                                      row_white=j;//记录该行连续黑点后的第一个白点的位置
                                      len=row_white-row_black;//黑线宽度
                                      blackdot=row_black+((len+1)>>1);//计算第i行的中心线位置
                                      if(len>4 && len<11) //前两行黑线宽度为6到10
                                        {
                                          blackright[i]=row_white;
                                          blackleft[i]=row_black;
                                        //  center[i]=blackdot;
                                        }
                                      if(len>30)
                                        {
                                          if(i>0)
                                         // center[i]=center[i+1];  
                                          blackright[i]=blackright[i+1];
                                          blackleft[i]=blackleft[i+1];
                                                  
                                        }
                                      break;//跳出上一个for循环,对下一行进行黑线提取
                                }
                          }
                  }
              }
        }
   }
这是提取前两行黑线的代码,请各位大神指教指教,这个能不能兼容单双线赛道?我的车子可以跑双线,但是有单线的时候会把中心引导线当成左边黑线,车子在右边赛道走,这个怎么解决?


作者: xHERO    时间: 2015-5-3 19:11
我也遇到同样的问题
作者: 一心一境14    时间: 2015-5-3 20:22
同无思路
作者: 樊洪江    时间: 2015-5-6 18:46
双线和单线的区别应该就是跳变吧,左右两个的黑线同时有一个跳变
作者: 嘎嘎嘎嘎    时间: 2015-5-17 10:13
朋友,你解决了么?
作者: 1chuxian1    时间: 2015-5-17 13:26
同问
作者: 在寻找的暅    时间: 2015-5-20 19:58
同问:)
作者: sw5131899    时间: 2015-5-21 20:35
在寻找的暅 发表于 2015-5-20 19:58
同问

搜索车前5行,从左到右,从右到左同时搜索,寻找白到黑的跳变,然后用数组统计黑线边缘,求中时用两个数组相加除2,就可以获得中线,单双都好使





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