初级会员

- 积分
- 56
- 金钱
- 56
- 注册时间
- 2018-3-15
- 在线时间
- 11 小时
|
3金钱
按照原子哥的例程改的,没贴出来的部分,除了sccb该成yuv,其他地方都没动。。
for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
{
for(j=0;j<OV7725_WINDOW_WIDTH;j++)
{
OV7725_RCK_L;
color=GPIOC->IDR&0XFF; //¶áêy¾Y
OV7725_RCK_H;
color<<=8;
OV7725_RCK_L;
color|=GPIOC->IDR&0XFF; //¶áêy¾Y
OV7725_RCK_H;
gray=(color>>8);//提取Y分量
if((i%2==0)&&(j%2==0))
{temp[i/2][j/2]=gray;} //提取为120*160图像数组,ram不够没办法
}
}
//otus二值化
for(i=0;i<120;i++)
{
for(j=0;j<160;j++)
{
if(temp[i][j]>max) max=temp[i][j];
if(temp[i][j]<min) min=temp[i][j];
}
}
threshold=(max+min)/2;
max=0;
min=0;
for(i=0;i<120;i++)
{
for(j=0;j<160;j++)
{
if(temp[i][j]>threshold) max=max+temp[i][j];
if(temp[i][j]<threshold) min=min+temp[i][j];
}
}
threshold=(max+min)/4800;
for(i=0;i<120;i++)
{
for(j=0;j<160;j++)
{
if(temp[i][j]>=threshold)
{
mux[i][j]=0xfe;
}
else
{
mux[i][j]=0x00;
}
}
}
//整场去噪点
count=0; // ????????
for(i=1;i<120;i++)
{
for(j=1;j<160;j++)
{
if(mux[i][j]==0xfe) //?????????,????????????,???????
{ if((mux[i-1][j]==0xfe || mux[i+1][j]==0xfe) && (mux[i][j-1]==0xfe || mux[i][j+1]==0xfe))
{
mux[i][j]=0xfe;
count++;
}
else
mux[i][j]=0x00;
}
else if(mux[i][j]==0x00) //?????????,????????????,???????
{
if((mux[i-1][j]==0x00 || mux[i+1][j]==0x00)&&(mux[i][j-1]==0x00 || mux[i][j+1]==0x00))
{
mux[i][j]=0x00;
}
else
{
mux[i][j]=0xfe;
count++;
}
}
}
}
//显示
for(i=1;i<240;i++)
{
for(j=1;j<320;j++)
{
bw=mux[i/2][j/2];
rgb=(((bw>>(3))<<11)|((bw>>(2))<<5)|((bw>>(3))<<0));//转为rgb565格式
LCD->LCD_RAM=rgb;
}
}
因为我看到有帖子说最后要转为rgb565才能显示,一开始没加二值化算法可以,为什么现在图像一片黑,难道算法有问题?
|
|