MINI STM32+OV7670能不能中值滤波

2019-07-21 02:13发布

1.能不能就直接对液晶显示屏上的图像进行中值滤波?
2.为什么我 设的数组u16 data[975];一旦大于1000就出不来图像或报错:内存不足?MINI板的内存这么小吗?
ps:代码用的是原子哥的光盘中OV7670的代码,就不拿出来了,我就加了一个中值滤波函数
void med_filter(u16* data, u16 width, u16 height)
{
int i,j,a,b,sum,m,n,medgray;
   u8 *tmpdata;
    memcpy((u16*)tmpdata, (u16*)data, height * width * sizeof(u16));
   for(i=1;i<height-1;i++)
  {
  for(j=1;j<width-1;j++)      
  {   int t=0;
   u8 med[9];
            for(m=i-1;m <i+2;++m)
            {
               for(n=j-1;n<j+2;++n)
                {
     med[t++]=tmpdata[m*width+n];
     
       }
             }
   for( a=0;a<5;a++)
   {  
    int min=a;
    for( b=a+1;b<9;b++)
    {
     if(med<med[min])
    {
    min=b;
    }
     }
   medgray=med[a];
   med[a]=med[min];
   med[min]=medgray;
   
   }   
  data[i*width+j]=med[4];
     LCD_Clear(WHITE);   
   LCD_WR_DATA(data[i*width+j]);
   }
   
  }
}



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;
         color_r=color&0xf800;
     color_b=color>>11;
     color>>=5;
     color_g=color&0x07e0;
     color=color_r+color_g+color_b;
   data[j]=color;     
   
   LCD_WR_DATA(color);  
  }
data[j]=color;这样写有错吗?还是要 data[j]=LCD_ReadPoint(i,j);
求大佬帮我看一下!!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-21 03:58
 精彩回答 2  元偷偷看……
拾叶
2楼-- · 2019-07-21 06:41
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 06:52
当然是可以的,不过你要仿真找问题
拾叶
4楼-- · 2019-07-21 09:31
正点原子 发表于 2019-4-28 00:42
当然是可以的,不过你要仿真找问题

原子哥OV7670的像数值是data[j]=color;还是data[j]=LCD_ReadPoint(i,j);

一周热门 更多>