我利用数组储存的颜 {MOD}数据,数组里面的数值只有0和1。1就是我所需要的颜 {MOD},0则为不需要,我写了一个颜 {MOD}识别程序,返回值是红 {MOD}中点的横坐标,但是这个识别程序的返回值不受我控制,我测了一下,返回的数值好像是 44。以下是我的扫描程序和颜 {MOD}中心寻找程序,有大佬可以帮帮忙吗?
void camera_refresh3(void)
{
COLOR_RGB color_rgb;
u16 i,j;
u16 color;
unsigned char sum=0;
if(ov_sta==2)
{
OV7725_CS=0;
OV7725_RRST=0;
OV7725_RCK_L;
OV7725_RCK_H;
OV7725_RCK_L;
OV7725_RRST=1;
OV7725_RCK_H;
for(i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
// LEDL_H;
GPIOB->CRL=0X88888888;
OV7725_RCK_L;
color=GPIOC->IDR&0XFF; //
OV7725_RCK_H;
color<<=8;
OV7725_RCK_L;
color|=GPIOC->IDR&0XFF; //
OV7725_RCK_H;
GPIOB->CRL=0X33333333;
ex(color,&color_rgb);
sum++;
if(sum==4)
{
sum=0;
if((color_rgb.Red<=255)&(color_rgb.Red>240))xs[(j+1)/4]=1;
else xs[(j+1)/4]=0;
}
}
}
OV7725_CS=1;
OV7725_RCK_L;
OV7725_RCK_H;
EXTI->PR=1<<15;
ov_sta=0;
}
}
extern unsigned char xs[80][240];
void ex(u16 color,COLOR_RGB* color_rgb)
{
unsigned short rgb;
color_rgb->Red = (unsigned char)( ( rgb & 0xF800 ) >> 8 )+0x07;
color_rgb->Green = (unsigned char)( ( rgb & 0x07E0 ) >> 3 )+0x03;
color_rgb->Blue = (unsigned char)( ( rgb & 0x001F ) << 3 )+0x07;
}
int SeachCentre(const SEARCH_AREA *Area)
{
unsigned int SpaceX,SpaceY,i,j,k,FailCount=0,spot1=0,spot2=0,l,r,centre_x;
SpaceX = 4;
SpaceY = 12;
for(i=Area->Y_Start;i<Area->Y_End;i+=SpaceY)
{
for(j=Area->X_Start;j<Area->X_End;j+=SpaceX)
{
// LEDR_H;
FailCount=0;
for(k=0;k<SpaceX+SpaceY;k++)
{
if(k<SpaceX)
{
if(xs[j+k][i+SpaceY/2]==0)
FailCount++;
}
else if(k>SpaceX)
{
if(xs[j+SpaceX/2][i+(k-SpaceX)]==0)
FailCount++;
}
if(FailCount>((SpaceX+SpaceY)>>ALLOW_FAIL_PER))
break;
}
// determining left,right and top endpoints
if(spot1==0)//if spot1 is open, get left and top
{
if(k==SpaceX+SpaceY)
{
l = j+SpaceX/2;
spot1=1; //close spot1
}
}
else
{
if((k!=SpaceX+SpaceY)&&(spot2==0)) //if spot1 is close while spot2 is open and k dosen't equal SpaceX+SpaceY,get right
{
r=j-SpaceX/2;
if((r-l)>=10)
{
centre_x=(l+r)/2;
spot2=1;//close spot2
return centre_x;
}
else
{
spot1=0;//open spot1
l=0;//clear left
r=0;//clear right
}
}
}//if spot2 is close, this program will naver be start.
}
}
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>