2017年全国大学生电子设计竞赛(预测题)-单一物体识别

2017年全国大学生电子设计竞赛(预测题)-单一物体识别(基于STM32和OV7670)

大部分板球系统都是使用图像识别小球的轨迹来控制电机保持平板平衡,故我们也是采用该模式来进行的图像识别的。

OV7670 模块简介--(源自ALIENTEK)

OV7670 OVOmniVision)公司生产的一颗1/6 寸的 CMOS VGA 图像传感器。该传感器体积小、工作电压低,提供单片VGA 摄像头和影像处理器的所有功能。通过SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8 位影像数据。该产品VGA图像最高达到30 /秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、度、色度等都可以通过SCCB 接口编程。OmmiVision 图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。

  • 带FIFO:由于采用了FIFO 做为数据缓冲,数据采集大大简便,用户只需要关心是如何读取即可,不需要关心具体数据是如何采集到的,这样可减小甚至不用关心CMOS 的控制以及时序关系,就能够实现图像的采集。

源码--(基于ALIENTEK修改

#include "sys.h"
#include "usart.h"		
#include "delay.h"	
#include "led.h"
#include "usmart.h" 
#include "lcd.h" 
#include "ov7670.h" 
#include "exti.h" 
#include "timer.h" 
#include "color.h"
extern u8 ov_sta;	
extern u8 ov_frame;	


void camera_refresh(void)
{
	u32 j;
 	u16 color;	 
	if(ov_sta==2)
	{
		LCD_Scan_Dir(U2D_L2R);		
		LCD_SetCursor(0x00,0x0000);	
		LCD_WriteRAM_Prepare();     
 		OV7670_CS=0;	 
 		OV7670_RRST=0;				
		OV7670_RCK=0;
		OV7670_RCK=1;
		OV7670_RCK=0;
		OV7670_RRST=1;				
		OV7670_RCK=1;  
		for(j=0;j<76800;j++)
		{
			GPIOB->CRL=0X88888888;		   
			OV7670_RCK=0; 
			color=OV7670_DATA;		
			OV7670_RCK=1; 	
			color<<=8;					  
 			OV7670_RCK=0;
			color|=OV7670_DATA;			  
			OV7670_RCK=1; 
			GPIOB->CRL=0X33333333;						 	 
			LCD_WR_DATA(color);	 
		}  
 		OV7670_CS=1; 							 
		OV7670_RCK=0; 
		OV7670_RCK=1; 
		EXTI->PR=1<<15;     		
		ov_sta=0;					
 		ov_frame++; 
		LCD_Scan_Dir(DFT_SCAN_DIR);	
		if(Trace(&condition, &result))
		{
			 POINT_COLOR=RED;
          		 LCD_DrawRectangle( result.x-result.w/2, result.y-result.h/2, result.x-result.w/2+result.w,  result.y-result.h/2+result.h);
           		 LCD_DrawRectangle( result.x-2, result.y-2,result.x+2, result.y+2);
			
			
		}		
	} 
}	  



 int main(void)
 {	
	u8 i;
	u8 lightmode=0,saturation=2,contrast=2;
	u8 tm=0; 
	u8 msgbuf[15];				
	delay_init();	    	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	uart_init(9600);
	OV7670_Init();	
	LED_Init();		  		
	LCD_Init();			   	
	if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) 
	{
		lcddev.width=240;
		lcddev.height=320; 
	}
	usmart_dev.init(72);	
	
 	POINT_COLOR=RED;
	LCD_ShowString(60,50,200,200,16,"Mini STM32");	
	LCD_ShowString(60,70,200,200,16,"OV7670 TEST");	
	LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
	LCD_ShowString(60,110,200,200,16,"2014/3/27");  	 
	LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");	 
  	LCD_ShowString(60,150,200,200,16,"OV7670 Init...");	  
	while(OV7670_Init())
	{
		LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
		delay_ms(200);
	    LCD_Fill(60,150,239,166,WHITE);
		delay_ms(200);
	}
 	LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
	delay_ms(1500);	 	   	  
	TIM3_Int_Init(10000,7199);										  
	EXTI15_Init();						
	OV7670_Window_Set(10,174,240,320);	
  	OV7670_CS=0;	
	LCD_Clear(BLACK);	
 	while(1)
	{	POINT_COLOR=BLUE; 
 		camera_refresh();	
 		if(tm)
		{
			LCD_ShowString((lcddev.width-240)/2+30,(lcddev.height-320)/2+60,200,16,16,msgbuf);
			tm--;
		}
 		if(i!=ov_frame)		
		{
			i=ov_frame;
			LED0=!LED0;
 		}
	}	   
}

效果图


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值