野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13300|回复: 1

怎么用2640采集完一帧图像之后对数据进行处理

[复制链接]
发表于 2017-6-23 13:31:01 | 显示全部楼层 |阅读模式
5火花


火花

我想做一个识别白色PVC管子上的黑色圆点的程序,大概思路也有,用火哥的429板子,先摄像头采集数据到SDRAM,然后读取SDRAM的数据并操作,这些数据是存到0xD0000000地址上数据大小是480*800*2个字节,下面是我编的一个recognization的程序大家看看有什么好的办法?主要问题是如何在一帧图像采集完之后调用xiang()这个函数处理数据,处理完之后可以继续正常采集数据,我的现在做不到继续采集数据,大家看看有什么好的办法?
  1. #include "Recognization.h"
  2. #include "./beep/bsp_beep.h"
  3. #include "./lcd/bsp_lcd.h"
  4. #include "./systick/bsp_SysTick.h"

  5. static uint16_t temp0=0;

  6. #define SAMPLE_NUM 2000

  7. void xiang(void)
  8. {
  9.         uint16_t temp1=0;
  10.         u16 d;
  11.        
  12.         temp1=SDRAM_Read();                       
  13.         d=Calcu_Absolute_Value(temp1,temp0);
  14.        
  15.         if(d<100){
  16. /*蜂鸣器端口初始化 */
  17.         BEEP_GPIO_Config();

  18.                
  19.         /* 控制IO */
  20.                 BEEP_TOGGLE;
  21.                 Delay_ms(20);
  22.         }
  23.        
  24.        
  25.         while(temp0){
  26.           temp0=temp1;
  27.                   }
  28.        
  29.                          DCMI_Cmd(ENABLE);
  30.   DCMI_CaptureCmd(ENABLE);        
  31. }

  32. uint16_t SDRAM_Read(void)       
  33. {               
  34.         uint32_t temp_r=0,temp_g=0,temp_b=0;
  35.         uint16_t temp;
  36.         uint32_t* pBuffer;
  37.        
  38.         __IO uint16_t *write_pointer =(uint16_t *) LCD_FRAME_BUFFER;
  39.         __IO uint16_t *write_pointer2 =(uint16_t *) LCD_FRAME_BUFFER2;
  40.         __IO uint16_t *write_pointer3 = (uint16_t *)LCD_FRAME_BUFFER2;
  41.        
  42.   
  43.        
  44.        
  45.                         /* 检查SDRAM标志,等待至SDRAM空闲 */  
  46.   while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)
  47.   {
  48.   }
  49.   
  50.   /*读取数据 */

  51.   for(; *write_pointer != LCD_FRAME_BUFFER+BUFFER_OFFSET; ){
  52.                
  53.                
  54.                
  55.                 *(uint16_t *)(write_pointer2)=*(uint16_t *)(write_pointer);
  56.                 write_pointer += 2;
  57.                 write_pointer2 += 2;
  58.                
  59.                
  60.                
  61.                
  62.    *pBuffer++= *(__IO uint16_t *)(write_pointer3);
  63.                         temp_r+=(*pBuffer>>11);                       
  64.                         temp_g+=((*pBuffer&0x07e0)>>5);
  65.                         temp_b+=(*pBuffer&0x001f);
  66.         write_pointer3 += 2;}
  67.    
  68.         temp=((temp_r/SAMPLE_NUM)<<11)|((temp_g/SAMPLE_NUM)<<5)|(temp_b/SAMPLE_NUM);
  69.         return temp;
  70.        
  71.        
  72.                        
  73. }

  74.        
  75.        



  76. u16 Calcu_Absolute_Value(u16 a,u16 b)
  77. {
  78.         if(a>b) return a-b;
  79.         else return b-a;
  80. }


复制代码

回复

使用道具 举报

发表于 2017-6-23 18:40:45 | 显示全部楼层
直接移植一些图像处理的算法库来做应该比较快
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-5 01:09 , Processed in 0.030172 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表