视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
飞思卡尔智能车摄像头组黑线提取
2025-09-25 14:27:39 责编:小OO
文档


#define ROW 36

#define COLUMN 70

#define SAMP_ROW_START 11 

#define THRESHOLD  0x20

#define ROW_START  1

#define  BLACK 0

#define  WHITE 1 

#define BLACK_LINE_MAX0  15 

#define BLACK_LINE_MIN0  4  

#define BLACK_LINE_MAX1  12 

#define BLACK_LINE_MIN1  2 

#define CENTER 35 

unsigned char Buffer[ROW][COLUMN];

unsigned char Buffer1[ROW][COLUMN];

unsigned char SampleFlag=0  ;  

unsigned char jiange; 

unsigned int m=0;

unsigned int n=0;

unsigned int line=0;

unsigned char Flag=0;

unsigned int  Line_Center[ROW]={20};

//--------------初始化函数----------------//

/*时钟初始化程序*/

{锁相环时钟=2*16*(2+1)/(1+1)=48MHz  

 锁相环锁定 

 选定外部时钟  

}

//--------------行场中断初始化-------------// 

void IC_Init(void) 

   TIOS=0x00;          

   TCTL4=0x09;         

   TSCR1=0x80;         

   TIE=0x03;           

   TFLG1=0xFF;         

void IO_Init(void)

{

}

//----------初始化SCI0---------------------//

void SCI_Init() 

{

    SCI0BD=312;         

    SCI0CR1=0;         

    SCI0CR2=0X2C;      

}

//---------------写SCI数据-------------------//

void SCI_Write(unsigned char sendchar) 

{

 //黑线的中值滤波 

int get_mid(unsigned int a,unsigned int b,unsigned int c)

  unsigned int x=0;

if(a>b){x=b;b=a;a=x;}

if(b>c){x=c;c=b;b=x;}

if(a>b){x=b;b=a;a=x;}

  return b ;

}

//求绝对值

int abs_1(int x)

{

if(x<0)x=-x;

  return(x);

}

 void black_extract(void)  

 黑线丢失计数器 

   unsigned char  stop=0;     //停车圈数计数器 

   int temp=0;    

   unsigned char left_flag1=0,right_flag1=0,left_flag2=0,right_flag2=0;   

 ////////////////////////////////////////////////////

 /////图像前部分用边缘检测法

 ///////////////////////////////////////////////////  

 左右跳变清零,这是必须的!! 

     right=0;       

 两边搜索 最边界干扰略去

         {left=j;left_flag1++;}                

 求黑线的中心  

 过滤过宽过细的黑线

          Line_Center[i]=(right+left+1)/2;                           

 黑线丢失清零 

    else   /////////////////过宽过细黑线进行插值

      }      

  }  

 /////图像后部分用边缘检测法

 ///////////////////////////////////////////////////  

 左右跳变清零,这是必须的!! 

     right=0;       

 两边搜索 最边界干扰略去

         {left=j;left_line=left;}                    

     }     

 求黑线的中心  

 过滤过宽过细的黑线

          Line_Center[i]=(right+left+1)/2;                           

 黑线丢失清零 

    else   /////////////////过宽过细黑线进行插值

      }      

  }

for(i=2;i  {

 黑线是连续的  值还需要确认  即相差多少就认为是错误  

  } 

  //黑线的中值滤波程序!

for(i=1;i      Line_Center[i]=temp;}   

void Image_binaryzation(unsigned int row)  //二值化程序 

{ unsigned char *p_Image; 

  unsigned char *q_Image; 

{

void chuli(void)

{

 unsigned char i,j;

 int temp=0;

for(i=0;i  {

    SCI_Write(' ') ;      

  } 

  Flag=1;

void main(void) 

{

  /* put your own code here */  

  PLL_Init();

  IC_Init();

  IO_Init();

  SCI_Init();

 

  for(;;) 

  {

  black_extract();

  chuli();  

  //  _FEED_COP(); /* feeds the dog */

  } /* loop forever */

  /* please make sure that you never leave main */

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED 

void interrupt 8  Port0_Interrupt()

{

  TFLG1_C0F=1;

 行计数器加 1 

if ( SampleFlag == 0 || lineSAMP_ROW_MAX )

  { 

 判断是否从新的一场开始 

   }            

if(line<=132)jiange=12;

else if(line>132&&line<=200) jiange=8;

else if(line>200&&line<=248) jiange=6;

  if(line%jiange==0)

  { 

  Buffer[m][0]=PORTA;  Buffer[m][n+0]=PORTA;

  Buffer[m][1]=PORTA;  Buffer[m][n+1]=PORTA;

  Buffer[m][2]=PORTA;  Buffer[m][n+2]=PORTA; 

  Buffer[m][68]=PORTA; Buffer[m][n+68]=PORTA;

  Buffer[m][69]=PORTA; Buffer[m][n+69]=PORTA;

  m++;  

  }

  Image_binaryzation(m);

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED  

void interrupt 9 Port1_interrupt()

{  TFLG1_C1F=1; //清场中断 

  TFLG1_C0F=1; //清行中断 

 列清零 

 行计数器 

  SampleFlag=1;//场标志位置 1 

  Flag=0;

}下载本文

显示全文
专题