摄像头组参考程序_第1页
摄像头组参考程序_第2页
摄像头组参考程序_第3页
摄像头组参考程序_第4页
摄像头组参考程序_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include common.h#include image.h#include gpio.h#include exti.h#include .h uart #include FTM.h#include delay.h#include isr.h/库函数调用 unsigned char threshold=135; /一次采集的行数 unsigned char Is_SendPhoto=0; /图像发送unsigned char Pix_dataVH=0,Bina_dataVH=0; /初始化像素数组、进制数组int LeftBorderV=0,RightBorderV=0, CenterL

2、ineV=0; /初始化左中右边界线坐标u16 CCD_V,CCD_H; /每次处理16行数据s8 Sumleft,Sumright; /纪录8次数据总和unsigned char top_line=40,top_line1=50,top_line2=48; long count,WhiteNum; /计数白色像素点unsigned char width_count=50; unsigned char width_min=50; /最少采集五十行unsigned char V_count=0; /行采集计数unsigned char jump_point; /定义跳变点unsigned cha

3、r last_top;unsigned char top top line=49; unsigned char THRE20; /清行中断long thre_sum=0; /总和初始值为零unsigned char thread_count;unsigned char center_min=30; /中点位置unsigned char left_line,right_line; /定义左右边界线unsigned int left_count,right_count; /左右边计数unsigned char Bina_DataH=0; /从零行开始u32 S_count=0;extern u32

4、 start4s; / void CameraInit() exti_init(PORTE,1,rising_down); /中断开始 disable_irq(91); exti_init(PORTE,0,falling_down); /中断结束void Binarization(void) /行中断 u16 i; for(i=0;ithreshold) /像素阈值的判断条件 Bina_Datai = 1; /灰度值大于32的为白点 else Bina_Datai = 0; /否则为黑点 void Get_Center(void) for(CCD_H=155;CCD_H1;CCD_H-) if

5、(Bina_DataCCD_H) & (Bina_DataCCD_H-1=0) & (Bina_DataCCD_H-2=0) /三列全为黑点 RightBorderCCD_V=CCD_H; break; /找到右边界,结束 else RightBorderCCD_V=0; /否则右边界丢失 for(CCD_H=125;CCD_HH-2;CCD_H+) if(Bina_DataCCD_H=0) & (Bina_DataCCD_H+1=0) & (Bina_DataCCD_H+2=0) LeftBorderCCD_V=CCD_H; break; /找到左边界,结束 else LeftBorderC

6、CD_V=280; / CenterLineCCD_V=(LeftBorderCCD_V+RightBorderCCD_V)/2; /中心线等于左右边界坐标和的一半void BinaData() int i=0,j=0; unsigned char *p; for(i=0;iV;i+) p=Pix_datai; for(j=0;j=threshold) /如果采集的点超过阈值 Bina_dataij=1; /该点为白点 else Bina_dataij=0;/反之为黑点 void AllFilt() /本段为确定中心黑线 count=0; for(CCD_V=1;CCD_VV-1;CCD_V+

7、) for(CCD_H=1;CCD_HH-1;CCD_H+) /从最左边开始对比检测 if(Bina_dataCCD_VCCD_H=1) if(Bina_dataCCD_V-1CCD_H=1 | Bina_dataCCD_V+1CCD_H=1) & (Bina_dataCCD_VCCD_H-1=1 | Bina_dataCCD_VCCD_H+1=1) Bina_dataCCD_VCCD_H=1; /某点四周像素为白,则该点为白点 count+; /摄像头行自加 else Bina_dataCCD_VCCD_H=0; /反之为黑点 else if(Bina_dataCCD_VCCD_H=0) i

8、f(Bina_dataCCD_V-1CCD_H=0 | Bina_dataCCD_V+1CCD_H=0) & (Bina_dataCCD_VCCD_H-1=0 | Bina_dataCCD_VCCD_H+1=0) Bina_dataCCD_VCCD_H=0; /四周像素为黑点,则该点为黑点 else Bina_dataCCD_VCCD_H=1; / 反之为白点 count+; /自动加行 void get_center() unsigned char *p; static unsigned char last_center=140; /最大行数 for(CCD_V=0;CCD_V1;CCD_H

9、-) /从第140列开始计数 if(*(p+CCD_H)=0) & (*(p+CCD_H-1)=0) & (*(p+CCD_H-2)=0) RightBorderCCD_V=CCD_H; /连续三点为黑,则为右边界 break; else RightBorderCCD_V=18; / for(CCD_H=140;CCD_H=8) CenterLine4=last_center; last_center=CenterLine4; /冒泡法滤波 / if(LeftBorderCCD_V-RightBorderCCD_V)width_count) / width_count=LeftBorderCCD_V-RightBorderCCD_V; /左右边界坐标差值大于阈值,则阈值变为新的坐标之差 for(CCD_V=LINE;CCD_V1;CCD_H-) if(*(p+CCD_H)=0) & (*(p+CCD_H-1)=0) & (*(p+CCD_H-2)=0) RightBorderCCD_V=CCD_H; /某点右边连续是黑点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论