您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 摄像头组参考程序K60
#includecommon.h#includeimage.h#includegpio.h#includeexti.h#include.huart#includeFTM.h#includedelay.h#includeisr.h//库函数调用unsignedcharthreshold=135;//一次采集的行数unsignedcharIs_SendPhoto=0;//图像发送unsignedcharPix_data[V][H]={0},Bina_data[V][H]={0};//初始化像素数组、进制数组intLeftBorder[V]={0},RightBorder[V]={0},CenterLine[V]={0};//初始化左中右边界线坐标u16CCD_V,CCD_H;//每次处理16行数据s8Sumleft,Sumright;//纪录8次数据总和unsignedchartop_line=40,top_line1=50,top_line2=48;longcount,WhiteNum;//计数白色像素点unsignedcharwidth_count=50;unsignedcharwidth_min=50;//最少采集五十行unsignedcharV_count=0;//行采集计数unsignedcharjump_point;//定义跳变点unsignedcharlast_top;unsignedchartoptopline=49;unsignedcharTHRE[20];//清行中断longthre_sum=0;//总和初始值为零unsignedcharthread_count;unsignedcharcenter_min=30;//中点位置unsignedcharleft_line,right_line;//定义左右边界线unsignedintleft_count,right_count;//左右边计数unsignedcharBina_Data[H]={0};//从零行开始u32S_count=0;externu32start4s;//voidCameraInit(){exti_init(PORTE,1,rising_down);//中断开始disable_irq(91);exti_init(PORTE,0,falling_down);//中断结束}voidBinarization(void)//行中断{u16i;for(i=0;i280;i++){if(Pix_data[32][i]threshold)//像素阈值的判断条件{Bina_Data[i]=1;//灰度值大于32的为白点}else{Bina_Data[i]=0;//否则为黑点}}}voidGet_Center(void){for(CCD_H=155;CCD_H1;CCD_H--){if((Bina_Data[CCD_H])&&(Bina_Data[CCD_H-1]==0)&&(Bina_Data[CCD_H-2]==0))//三列全为黑点{RightBorder[CCD_V]=CCD_H;break;//找到右边界,结束}elseRightBorder[CCD_V]=0;//否则右边界丢失}for(CCD_H=125;CCD_HH-2;CCD_H++){if((Bina_Data[CCD_H]==0)&&(Bina_Data[CCD_H+1]==0)&&(Bina_Data[CCD_H+2]==0)){LeftBorder[CCD_V]=CCD_H;break;//找到左边界,结束}elseLeftBorder[CCD_V]=280;//}CenterLine[CCD_V]=(LeftBorder[CCD_V]+RightBorder[CCD_V])/2;//中心线等于左右边界坐标和的一半}voidBinaData(){inti=0,j=0;unsignedchar*p;for(i=0;iV;i++){p=Pix_data[i];for(j=0;jH;j++){if(*(p+j)=threshold)//如果采集的点超过阈值{Bina_data[i][j]=1;//该点为白点}elseBina_data[i][j]=0;//反之为黑点}}}voidAllFilt()//本段为确定中心黑线{count=0;for(CCD_V=1;CCD_VV-1;CCD_V++){for(CCD_H=1;CCD_HH-1;CCD_H++)//从最左边开始对比检测{if(Bina_data[CCD_V][CCD_H]==1){if((Bina_data[CCD_V-1][CCD_H]==1||Bina_data[CCD_V+1][CCD_H]==1)&&(Bina_data[CCD_V][CCD_H-1]==1||Bina_data[CCD_V][CCD_H+1]==1)){Bina_data[CCD_V][CCD_H]=1;//某点四周像素为白,则该点为白点count++;//摄像头行自加}elseBina_data[CCD_V][CCD_H]=0;//反之为黑点}elseif(Bina_data[CCD_V][CCD_H]==0){if((Bina_data[CCD_V-1][CCD_H]==0||Bina_data[CCD_V+1][CCD_H]==0)&&(Bina_data[CCD_V][CCD_H-1]==0||Bina_data[CCD_V][CCD_H+1]==0)){Bina_data[CCD_V][CCD_H]=0;//四周像素为黑点,则该点为黑点}else{Bina_data[CCD_V][CCD_H]=1;//反之为白点count++;//自动加行}}}}}voidget_center(){unsignedchar*p;staticunsignedcharlast_center=140;//最大行数for(CCD_V=0;CCD_VLINE;CCD_V++)//从第一行开始计数{p=Bina_data[CCD_V];for(CCD_H=140;CCD_H1;CCD_H--)//从第140列开始计数{if((*(p+CCD_H)==0)&&(*(p+CCD_H-1)==0)&&(*(p+CCD_H-2)==0)){RightBorder[CCD_V]=CCD_H;//连续三点为黑,则为右边界break;}elseRightBorder[CCD_V]=18;//}for(CCD_H=140;CCD_HH-2;CCD_H++){if((*(p+CCD_H)==0)&&(*(p+CCD_H+1)==0)&&(*(p+CCD_H+2)==0)){LeftBorder[CCD_V]=CCD_H;//连续三点为黑,则为左边界break;}elseLeftBorder[CCD_V]=262;//}CenterLine[CCD_V]=(LeftBorder[CCD_V]+RightBorder[CCD_V])/2;//得到中心黑线位置if(fabsf(CenterLine[4]-last_center)=8)CenterLine[4]=last_center;last_center=CenterLine[4];//冒泡法滤波//if((LeftBorder[CCD_V]-RightBorder[CCD_V])width_count)//width_count=LeftBorder[CCD_V]-RightBorder[CCD_V];//左右边界坐标差值大于阈值,则阈值变为新的坐标之差}for(CCD_V=LINE;CCD_VV;CCD_V++){p=Bina_data[CCD_V];for(CCD_H=(unsignedchar)CenterLine[CCD_V-1];CCD_H1;CCD_H--){if((*(p+CCD_H)==0)&&(*(p+CCD_H-1)==0)&&(*(p+CCD_H-2)==0)){RightBorder[CCD_V]=CCD_H;//某点右边连续是黑点,则为右边界break;}elseRightBorder[CCD_V]=18;}for(CCD_H=(unsignedchar)CenterLine[CCD_V-1];CCD_HH-2;CCD_H++){if((*(p+CCD_H)==0)&&(*(p+CCD_H+1)==0)&&(*(p+CCD_H+2)==0)){LeftBorder[CCD_V]=CCD_H;//某点左边连续是黑点,则为右边界break;}elseLeftBorder[CCD_V]=262;}CenterLine[CCD_V]=(LeftBorder[CCD_V]+RightBorder[CCD_V])/2;//中线位置//if((LeftBorder[CCD_V]-RightBorder[CCD_V])width_count)//width_count=LeftBorder[CCD_V]-RightBorder[CCD_V];}}
本文标题:摄像头组参考程序K60
链接地址:https://www.777doc.com/doc-2380461 .html