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);
求大佬帮我看一下!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>