注册 登录
查看: 674|回复: 4

摄像头巡线,看懂的 讲讲思路吧。谢谢

[复制链接]
发表于 2014-10-31 22:32:14 | 显示全部楼层 |阅读模式
  1. void get_firstedge(void)
  2. {
  3.   uint8 i;

  4.   cross[59]=0;
  5.   cross[60]=0;

  6.   //左边缘
  7.   for(i=40;i>1;i--)
  8.   {
  9.     if(img[59*80+i]==0&&img[59*80+i+1]==255&&img[59*80+i-1]==0)
  10.     {
  11.       leftedge[59]=i;
  12.       break;
  13.     }
  14.     leftedge[59]=0;
  15.   }
  16.   //右边缘
  17.   for(i=40;i<78;i++)
  18.   {
  19.     if(img[59*80+i]==0&&img[59*80+i-1]==255&&img[59*80+i+1]==0)
  20.     {
  21.       rightedge[59]=i;
  22.       break;
  23.     }
  24.     rightedge[59]=79;
  25.   }

  26.   middle[59]=(leftedge[59]+rightedge[59])>>1;

  27.   //判断此行是否出赛道
  28.   if(leftedge[59]==0&&rightedge[59]==79&&img[80*59+middle[59]]==0)
  29.   {
  30.     rowout[59]=1;
  31.   }
  32.   else
  33.     rowout[59]=0;
  34. }

  35. void get_lastedge(void)
  36. {
  37.   int i,j,s;
  38.   leftstart=middle[59]+10;
  39.   rightstart=middle[59]-10;

  40.   outrow=-1;
  41.   outrow1=-1;
  42.   crossflag=0;
  43.   crossflag1=0;

  44.   //左边缘
  45.   for(j=58;j>=0;j--)
  46.   {
  47.     for(i=leftstart;i>1;i--)
  48.     {
  49.       if(i>77)
  50.         i=77;
  51.       if(img[80*j+i]==0&&img[80*j+i+1]==255&&img[80*j+i-1]==0)
  52.       {
  53.         leftedge[j]=i;
  54.         break;
  55.       }
  56.       leftedge[j]=0;
  57.     }

  58.     //右边缘
  59.     for(i=rightstart;i<78;i++)
  60.     {
  61.       if(i<2)
  62.         i=2;
  63.       if(img[80*j+i]==0&&img[80*j+i-1]==255&&img[80*j+i+1]==0)
  64.       {
  65.         rightedge[j]=i;
  66.         break;
  67.       }
  68.       rightedge[j]=79;
  69.     }

  70.     middle[j]=(leftedge[j]+rightedge[j])>>1;
  71.     leftstart=middle[j]+10;
  72.     rightstart=middle[j]-10;

  73.     //判断此行是否出赛道
  74.     if(leftedge[j]==0&&rightedge[j]==79&&img[80*j+middle[j]]==0&&img[80*j+middle[j]+5]==0&&img[80*j+middle[j]-5]==0)
  75.     {
  76.       rowout[j]=1;
  77.     }
  78.     else
  79.       rowout[j]=0;

  80.     if(rowout[j+1]==1)
  81.     {
  82.       if(rowout[j]==1)
  83.       {
  84.         outrow=j+1;
  85.         break;              //退出,不执行后面的程序
  86.       }
  87.       else
  88.       {
  89.         middle[j+1]=(middle[j]+middle[j+2])>>1;
  90.       }
  91.     }

  92.     //判断此行是否出赛道
  93.     if(crossflag==0)
  94.     {
  95.       if((leftedge[j]-leftedge[j+1]>30)||(leftedge[j]-leftedge[j+1]<-30)||
  96.          (rightedge[j]-rightedge[j+1]>30)||(rightedge[j]-rightedge[j+1]<-30))
  97.       {
  98.         outrow=j+1;
  99.         break;
  100.       }
  101.     }
  102.     //获取下一行的搜索起始点
  103.     if(leftedge[j]>rightedge[j]-15)
  104.     {
  105.       leftstart=rightedge[j]-1;
  106.       rightstart=leftedge[j]+1;
  107.     }
  108.     else
  109.     {
  110.       leftstart=middle[j]+10;
  111.       rightstart=middle[j]-10;
  112.     }


  113.     cross[j]=0;

  114.     //判断此行是否处于十字道
  115.     if(leftedge[j]==0&&rightedge[j]==79&&img[j*80+40]==255&&img[j*80+20]==255&&img[j*80+60]==255)
  116.     {
  117.       cross[j]=1;

  118.       if(cross[j+1]==1)
  119.       {
  120.         crossflag=1;
  121.         crossflag1=1;
  122.         g_ncrosscntflag=1;
  123.         middle[j+1]=middle[j+2];
  124.         middle[j]=middle[j+1];
  125.       }

  126.       leftstart=rightstart=middle[j];
  127.     }
  128.     /*
  129.     if(rightedge[j]-leftedge[j]>60)
  130.     {
  131.       cross1[j]=1;
  132.       if(cross1[j+1]==1)
  133.       {
  134.         crossflag=1;
  135.         crossflag1=1;
  136.         middle[j+1]=middle[j+2];
  137.         middle[j]=middle[j+1];
  138.       }
  139.       leftstart=rightstart=middle[j];
  140.     }*/

  141.     //十字弯处理
  142.     if(crossflag1)
  143.     {
  144.       if(leftedge[j]==0&&rightedge[j]!=79&&img[80*j+middle[j]]==255)
  145.       {
  146.         if(rightedge[j]>65)
  147.           middle[j]=49;
  148.         else
  149.         {
  150.           s=rightedge[j]-rightedge[j+1];
  151.           if(s>0)
  152.             s=0;
  153.           middle[j]=middle[j+1]+s;
  154.           if(middle[j]<0)
  155.             middle[j]=0;
  156.         }
  157.       }
  158.       else
  159.         if(leftedge[j]!=0&&rightedge[j]==79&&img[80*j+middle[j]]==255)
  160.         {
  161.           if(leftedge[j]<15)
  162.             middle[j]=29;
  163.           else
  164.           {
  165.             s=leftedge[j]-leftedge[j+1];
  166.             if(s<0)
  167.               s=0;
  168.             middle[j]=middle[j+1]+s;
  169.             if(middle[j]>79)
  170.               middle[j]=79;
  171.           }
  172.         }
  173.         else
  174.           if(leftedge[j]!=0&&rightedge[j]!=79&&img[80*j+middle[j]]==255)
  175.           {
  176.             if((rightedge[j]-leftedge[j])>40)
  177.               middle[j]=39;
  178.             else
  179.               crossflag1=0;
  180.           }
  181.           else
  182.             if(leftedge[j]==0&&rightedge[j]==79&&img[80*j+middle[j]]==255)
  183.             {
  184.               middle[j]=middle[j+1];
  185.             }
  186.       if(((middle[j]-middle[j+1])>=10||(middle[j]-middle[j+1])<=-10)&&cross[j]==0)
  187.         middle[j]=middle[j+1];
  188.       leftstart=middle[j]+5;
  189.       rightstart=middle[j]-5;
  190.     }
  191.     else
  192.     {
  193.       if(leftedge[j]==0&&rightedge[j]!=79&&img[80*j+middle[j+1]]==255)
  194.       {
  195.         s=rightedge[j]-rightedge[j+1];
  196.         if(s>0)
  197.           s=0;
  198.         middle[j]=middle[j+1]+s;
  199.         if(middle[j]<0)
  200.           middle[j]=0;
  201.       }
  202.       else
  203.         if(leftedge[j]!=0&&rightedge[j]==79&&img[80*j+middle[j+1]]==255)
  204.         {
  205.           s=leftedge[j]-leftedge[j+1];
  206.           if(s<0)
  207.             s=0;
  208.           middle[j]=middle[j+1]+s;
  209.           if(middle[j]>79)
  210.             middle[j]=79;
  211.         }
  212.     }  
  213.   }
  214.   if(outrow>-1)
  215.   {
  216.     for(i=outrow;i>=0;i--)
  217.     {
  218.       if(middle[outrow+4]<15)
  219.         middle<i>=0;
  220.       else
  221.         if(middle[outrow+4]>55)
  222.           middle<i>=79;
  223.     }
  224.   }
  225. }


  226. </i></i>

回复

使用道具 举报

发表于 2014-10-31 22:34:47 | 显示全部楼层
哥们,基本上没人愿意帮你看代码,跟你一一讲解的,你哪句话看不懂,可以提处理,但一大堆代码,真心不想看的。

你可以一句一句注释,直到你看不懂,再说说哪句没看懂吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-31 22:39:30 | 显示全部楼层
仰逸致 发表于 2014-10-31 22:34
哥们,基本上没人愿意帮你看代码,跟你一一讲解的,你哪句话看不懂,可以提处理,但一大堆代码,真心不想看 ...

恩,好吧。我知道了。其实我也想分享 代码。大家一起看看

回复 支持 反对

使用道具 举报

发表于 2014-10-31 22:49:49 | 显示全部楼层
zouzhewei 发表于 2014-10-31 22:39
恩,好吧。我知道了。其实我也想分享 代码。大家一起看看

原来如此,顶一个
回复 支持 反对

使用道具 举报

发表于 2014-11-2 11:31:10 | 显示全部楼层
这种这么长的.......
回复 支持 反对

使用道具 举报

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

本版积分规则

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