STM32单片机ov760摄像头进行图像采集处理_第1页
STM32单片机ov760摄像头进行图像采集处理_第2页
STM32单片机ov760摄像头进行图像采集处理_第3页
STM32单片机ov760摄像头进行图像采集处理_第4页
STM32单片机ov760摄像头进行图像采集处理_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上#include <stm32f10x.h>#include <stdio.h>#include <usart.h>#include <Nvic_Exit.h>#include <delay.h>#include <tft.h>#include <ov7670.h>#include <I2C.h>#include "Image.h"#include "include.h" float kp,kd,ki; s16 steererr =

2、0; u8 Get_a_Y() u8 t1,t2; /获得一个Y分量的过程FIFO_RCK=0;FIFO_RCK=1; t1=(0x00ff&GPIOB->IDR); FIFO_RCK=0;FIFO_RCK=1;t2=(0x00ff&GPIOB->IDR);/跳过一个像素 FIFO_RCK=0;FIFO_RCK=1; t2=(0x00ff&GPIOB->IDR); FIFO_RCK=0;FIFO_RCK=1;t2=(0x00ff&GPIOB->IDR); return t1; void skip_a_row() u16 i; u8 tem

3、p;for (i=0;i<320;i+)/跳过一个像素 FIFO_RCK=0;FIFO_RCK=1; temp=(0x00ff&GPIOB->IDR); FIFO_RCK=0;FIFO_RCK=1;temp=(0x00ff&GPIOB->IDR); void Get_a_Image() u16 i,j; for (i=0;i<R;i+) for(j=0;j<C;j=j+2) / dataij= Get_a_Y(); /跳过紧接着的5行skip_a_row();skip_a_row();skip_a_row(); skip_a_row(); skip

4、_a_row(); u8 Abs8(u8 a) if (a>=0) return a; else return -a; void send_pic(void) u8 i,j; USART_SendData(USART1,0xFF); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET); for (i=0;i<R;i+) for (j=0;j<C;j=j+2) if(dataij=255) dataij-; USART_SendData(USART1,dataij); while(USART_GetFlagSta

5、tus(USART1, USART_FLAG_TXE) = RESET); /*/函数名: DataAnalyse/函数类型:void 参数:l:图像数组号/功能:图像数据分析/*/void DataAnalyse(u8 l) Data=&data00; ImageProcess();/全局变量,要改/void ImageProcess()int i=0,j=0;u8 *p=0;/unsigned char *q=0; /ThresholdValue = otsu (unsigned char *)Data, C, 0, 0, R, C); /ThresholdValue = 130;

6、 /均值滤波/ for(i=0;i<38;i+)/ / for (p=Data+i*C+3;p<Data+(i+1)*C-3;p+)/ / *p=(*p+*(p+1)+*(p-1)/3; /使用均值滤波的方式滤波/ / /二值化for (p = Data; p <= Data+R*C; p+)if (*p > ThresholdValue)*p = White;/130 =ThresholdValueelse*p = Black; /滤波for (i=0;i<R;i+)p = Data+i*C+1;j=0;while (j<C-2)if (*(p-1) =

7、White && *p = Black && *(p+1) = White)*p = White;else if (*(p-1) = Black && *p = White && *(p+1) = Black)*p = Black;j+;p+;void mygetLmr() u8 i=0; u8 j=0; u8 pLeft,pRight ; u8 bFoundLeft = 0; u8 bFoundRight = 0; /unsigned char TripLen = 4; char bLeftEnd=0; char bRightE

8、nd=0; char bMidEnd=0; BlackLineDataR-1=LastFieldMid1; for (i=R-2;i>3&&bMidEnd!=1;i-) /清零,以备下一行使用 bFoundLeft=0; bFoundRight=0; /向左扫描 for (pLeft=BlackLineDatai+1;pLeft>2;pLeft-) if (*(Data+i*C+pLeft)=Black) bFoundLeft=1; Lefti=pLeft; pLeft=1; if(bFoundLeft!=1) Lefti=1; /检测是否到了尽头 /向右扫描 fo

9、r (pRight=BlackLineDatai+1;pRight<C-2;pRight+) if (*(Data+i*C+pRight)=Black)/&&*(Data+i*C+pRight+1)=Black) bFoundRight=1; Righti=pRight; pRight=C; if (bFoundRight!=1) Righti=C-1; BlackLineDatai=(Lefti+Righti)/2; /左右边线采集结束,开始逻辑处理,易错,小心! 以上的部分代码安全 /* if ( *(Data+i*C+ BlackLineDatai)=Black)

10、bMidEnd=1; */ if (bFoundRight!=1&&bFoundLeft!=1) Steerangle = STRM; if (BlackLineDatai>C-4)|BlackLineDatai<4) bMidEnd=1; LastFieldMid1= BlackLineData R-5; LastFieldMid2=BlackLineData R-6;void SmoothMid() / u8 i; for (i=R-3;i>2;i-) if (Abs8(BlackLineDatai-BlackLineDatai-1)>5&&

11、amp; Abs8(BlackLineDatai-BlackLineDatai+1)>5 ) BlackLineDatai=(BlackLineDatai-1+BlackLineDatai+1 )/2; void AddMtoPic(void) u8 i; for(i=0;i<R;i+) dataiBlackLineDatai=Black; datai80=Black; void Steer_control(void) /u8 kp,kd,ki; / s16 steererr = 0; / s32 sum=0; /s8 dircnt=0; int i=0,a=0,b=0,aver;

12、/float e;double e;double s; Err=(BlackLineData4+BlackLineData5+BlackLineData6+BlackLineData7+BlackLineData8)/5-80;/BlackLineData20+BlackLineData21+BlackLineData22+BlackLineData23+BlackLineData24)/10-80; Errd=(BlackLineData13+BlackLineData12+BlackLineData11+BlackLineData10+BlackLineData9)/5-80; Errb=

13、(BlackLineData39+BlackLineData38+BlackLineData37+BlackLineData36+BlackLineData35)/5-80; Erri=( Errd-Err);for(i=0;i<=34;i+) a=(BlackLineDatai+BlackLineDatai+1+BlackLineDatai+2+BlackLineDatai+3+BlackLineDatai+4)/5-80; b=b+a; aver=b/10; for(i=0;i<=34;i+) a=(BlackLineDatai+BlackLineDatai+1+BlackLi

14、neDatai+2+BlackLineDatai+3+BlackLineDatai+4)/5-80; e+=(a-aver)*(a-aver); e=e/(10-1); s=sqrt(e)*1000; void SpeedContiol(u16 speed) TIM3->CCR2 =speed; /TIM2->CCR2 = speed; void zhidaowang (void) SpeedContiol(547); SpeedContiol(547); SpeedContiol(547);/ SpeedContiol(525); /546 kp=10; kd=6; steere

15、rr = kp*(Err-3.5)+ kd*Erri; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; void xiaos(void) SpeedContiol(542) ;SpeedContiol(542) ;SpeedContiol(542) ; kp=

16、8; kd=1; steererr =(kp*Err-4)+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle;TIM3->CCR1 = Steerangle;TIM3->CCR1 = Steerangle; void xiaow5(void) /下一次改这个 SpeedContiol(546);SpeedContiol(546);Speed

17、Contiol(546); kp=8; kd=4; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; void xiaow4(void) /? SpeedContiol(542);SpeedContiol

18、(542);SpeedContiol(542);/544 kp=9;/ kd=4;/1.5; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; void xiaow3(void) SpeedContiol

19、(546);SpeedContiol(546);SpeedContiol(546);/544 kp=8;/2. kd=65;/1.5 ki=0; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle;TIM3->CCR1 = Steerangle;TIM3->CCR1 = Steerangle; void x

20、iaow2(void) SpeedContiol(543);SpeedContiol(543);SpeedContiol(543);/ 这个很重要 kp=5; kd=10;/1.5 ki=0; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; TIM3->

21、;CCR1 = Steerangle; void xiaow(void) SpeedContiol(546); SpeedContiol(546); SpeedContiol(546);/550 kp=6;/2 kd=6; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steer

22、angle; TIM3->CCR1 = Steerangle; void zhidao1(void) SpeedContiol(541); SpeedContiol(541); SpeedContiol(541);/553 kp=2; kd=1; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr; if(Steerangle<=STRL) Steerangle=STRL; if(Steerangle>=STRR) Steerangle=STRR; TIM3->CCR1 = Steerangle; TIM3-&

23、gt;CCR1 = Steerangle; TIM3->CCR1 = Steerangle; /新加/ / void zhidao(void) SpeedContiol(570); SpeedContiol(570); SpeedContiol(570); kp=0; kd=1.5; steererr = kp*Err+ kd*Erri ; Steerangle = STRM-steererr+4; if(Steerangle<=STRR) Steerangle=STRR; if(Steerangle>=STRL) Steerangle=STRL; TIM3->CCR1

24、 = Steerangle; TIM3->CCR1 = Steerangle; TIM3->CCR1 = Steerangle; void zhidaowan (void) SpeedContiol(555);SpeedContiol(555);SpeedContiol(555);kp=17;kd=5;steererr = kp*(Errd-3.5)+ kd*Erri;Steerangle = STRM-steererr; if(Steerangle>640|Steerangle<440) SpeedContiol(557);if(Steerangle<=STRR) Steerangle=STRR;if(Steerangle>=

温馨提示

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

评论

0/150

提交评论