標題: 基于stm3210x和ov7725二值化源程序 [打印本頁]
作者: qwasas 時間: 2019-5-27 13:28
標題: 基于stm3210x和ov7725二值化源程序
使用OV7725進行采集數據,顯示到LCD屏幕上面,再進行灰度處理,然后再尋找圖像分割的灰度閾值,進行圖像二值化。
關于圖像分科可以自己百度。。。。

首先進行攝像頭的圖像采集,使用的是野火帶FIFO的OV7725攝像頭,幀速率有點慢,但是勉強還能采集數據顯示。
單片機源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "string.h"
- #include "ov7725.h"
- #include "tpad.h"
- #include "timer.h"
- #include "exti.h"
- #include "usmart.h"
- #define OV7725 1
- #define OV7725_WINDOW_WIDTH 320 // <=320
- #define OV7725_WINDOW_HEIGHT 240 // <=240
- u32 j,i,x=0,y=0;
- u16 color;
- u8 gm_red, gm_green, gm_blue;
- u8 tm=0;
- int r,tt;
- u8 lightmode=0,saturation=2,contrast=2;
- u8 effect=0,brightness=0;
- u8 showmode=0;
- u8 msgbuf[15];//消息緩存區
- extern u8 ov_sta; //在exit.c里 面定義
- extern u8 ov_frame; //在timer.c里面定義
- //更新LCD顯示(OV7725)
- void OV7725_camera_refresh(void)
- {
- if(ov_sta) //有幀中斷更新
- {
- LCD_Scan_Dir(U2D_L2R); //從上到下,從左到右
- if(lcddev.id==0X1963)
- LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_HEIGHT,OV7725_WINDOW_WIDTH);//將顯示區域設置到屏幕中央
- LCD_WriteRAM_Prepare(); //開始寫入GRAM
- OV7725_RRST=0; //開始復位讀指針
- OV7725_RCK_L;
- OV7725_RCK_H;
- OV7725_RCK_L;
- OV7725_RRST=1; //復位讀指針結束
- OV7725_RCK_H;
- for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
- {
- for(j=0;j<OV7725_WINDOW_WIDTH;j++)
- {
- OV7725_RCK_L;
- color=GPIOC->IDR&0XFF;//讀數據
- OV7725_RCK_H;
- color<<=8;
- OV7725_RCK_L;
- color|=GPIOC->IDR&0XFF;//讀數據
- OV7725_RCK_H;
-
- gm_red = color>>11;
- gm_green = (color&0x07E0)>>5;
- gm_blue = (color&0x001F);
-
- if((gm_red<0X0008)&&(gm_blue<0X0020)&&(gm_green<0X0020))
- {
- color =0x0000;
- }
- else
- {
- color=0xffff;
- }
- LCD->LCD_RAM=color;
- }
-
- }
- ov_sta=0; //清零幀中斷標記
- ov_frame++;
- LCD_Scan_Dir(DFT_SCAN_DIR); //恢復默認掃描方向
- }
- }
- //更新LCD顯示(OV7725)
- void OV7726_camera_refresh(void)
- {
- if(ov_sta) //有幀中斷更新
- {
- LCD_Scan_Dir(U2D_L2R); //從上到下,從左到右
- if(lcddev.id==0X1963)
- LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_HEIGHT,OV7725_WINDOW_WIDTH);//將顯示區域設置到屏幕中央
- LCD_WriteRAM_Prepare(); //開始寫入GRAM
- OV7725_RRST=0; //開始復位讀指針
- OV7725_RCK_L;
- OV7725_RCK_H;
- OV7725_RCK_L;
- OV7725_RRST=1; //復位讀指針結束
- OV7725_RCK_H;
- for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
- {
- for(j=0;j<OV7725_WINDOW_WIDTH;j++)
- {
- OV7725_RCK_L;
- color=GPIOC->IDR&0XFF; //讀數據
- OV7725_RCK_H;
- color<<=8;
- OV7725_RCK_L;
- color|=GPIOC->IDR&0XFF; //讀數據
- OV7725_RCK_H;
- LCD->LCD_RAM=color;
- }
-
- }
- ov_sta=0; //清零幀中斷標記
- ov_frame++;
- LCD_Scan_Dir(DFT_SCAN_DIR); //恢復默認掃描方向
- }
- }
- int main(void)
- {
- u8 sensor=0;
- u8 key;
- u8 i=0;
- u8 msgbuf[15];//消息緩存區
-
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- uart_init(115200); //串口初始化為 115200
- usmart_dev.init(72); //初始化USMART
- LED_Init(); //初始化與LED連接的硬件接口
- KEY_Init(); //初始化按鍵
- LCD_Init(); //初始化LCD
- TPAD_Init(6); //觸摸按鍵初始化
- POINT_COLOR=RED; //設置字體為紅色
- LCD_ShowString(30,50,200,16,16,"AHUT");
- LCD_ShowString(30,70,200,16,16,"OV7725");
- LCD_ShowString(30,110,200,16,16,"2019/5/22");
- LCD_ShowString(30,210,200,16,16,"TPAD(SD2):Effects");
- LCD_ShowString(30,230,200,16,16,"OV7725 Init...");
- while(1)//初始化OV7725
- {
- if(OV7725_Init()==0)
- {
- sensor=OV7725;
- LCD_ShowString(30,230,200,16,16,"OV7725 Init OK ");
- OV7725_Light_Mode(lightmode);
- OV7725_Color_Saturation(saturation);
- OV7725_Brightness(brightness);
- OV7725_Contrast(contrast);
- OV7725_Special_Effects(effect);
- while(1)
- {
- key=KEY_Scan(0);
- if(key==S1)
- {
- OV7725_Window_Set(OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT,0);//QVGA模式輸出
- break;
- }
- i++;
- if(i==100)
- LCD_ShowString(30,250,210,16,16,"S1:QVGA"); //閃爍顯示提示信息
- if(i==200)
- {
- LCD_Fill(30,250,210,250+16,WHITE);
- i=0;
- }
- delay_ms(5);
- }
- OV7725_CS=0;
- break;
- }
- }
- TIM6_Int_Init(10000,7199); //10Khz計數頻率,1秒鐘中斷
- EXTI8_Init(); //使能定時器捕獲
- LCD_Clear(BLACK);
- while(1)
- {
- key=KEY_Scan(0);//不支持連按
- if(key)
- {
- tm=20;
- switch(key)
- {
- case S1:
- showmode++;
- if(sensor==OV7725)
- {
- if(showmode>1)showmode=0;
- }
- break;
- }
- }
- if(sensor==OV7725)
- {
- if(showmode==0)
- OV7725_camera_refresh();//更新顯示
- else
- OV7726_camera_refresh();//更新顯示;
- }
- if(tm)
- {
- LCD_ShowString((lcddev.width-240)/2+30,(lcddev.height-320)/2+60,200,16,16,msgbuf);
- tm--;
- }
- i++;
- if(i>=15)//DS0閃爍.
- {
- i=0;
- LED0=!LED0;
- }
- }
- }
復制代碼
所有資料51hei提供下載:
erzhi2.7z
(238.56 KB, 下載次數: 61)
2019-5-28 04:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
这里只有精品视频在线观看
|
少妇高潮久久久久久潘金莲
|
成人福利在线观看
|
青青草精品视频
|
青青草国产成人av片免费
|
羞羞在线
|
日本福利视频
|
av黄色网
|
久久久网
|
男女激情视频网站
|
91精品在线免费观看
|
中文一区二区
|
欧美午夜理伦三级在线观看
|
日韩精品大片
|
欧美一级特黄aa大片
|
色婷婷婷
|
成人黄性视频
|
久久精品视频国产
|
青青视频网
|
五月综合色
|
日韩高清精品免费观看
|
黄色在线播放
|
www.爱爱|
亚洲欧美一区二区三区四区
|
日本少妇一区二区
|
国产视频1区
|
91久久在线
|
涩涩在线
|
成人一级毛片
|
四虎永久在线视频
|
国产高清视频
|
日韩网站在线观看
|
国产精品成人一区二区
|
中文字幕免费在线观看
|
欧美日韩一区二区在线
|
成年网站在线观看
|
日韩国产一区二区
|
亚洲精品福利
|
黄色福利视频
|
免费一级大片
|
国产精品手机在线
|