初中生
最后登录1970-1-1
在线时间 小时
注册时间2020-7-19
|
移植的csdn和咱们论坛的唯一的一个有颜色识别代码的贴子(板子是霸道),两个我都试了一下,发现一调用Trace函数就白屏,自己琢磨了许久还是找不出问题。 if(Trace(&Condition,&Resu))
{
ILI9806G_DrawRectangle ( Resu.x-Resu.w/2, Resu.y-Resu.h/2, Resu.w, Resu.h, 0 );
ILI9806G_DrawRectangle ( Resu.x-2, Resu.y-2, 4, 4, 1 );
}
Easytracer函数部分
int Trace(const TARGET_CONDI *Condition,RESULT *Resu)
{
unsigned int i;
static unsigned int x0,y0,flag=0;
static SEARCH_AREA Area={IMG_X,IMG_X+IMG_W,IMG_Y,IMG_Y+IMG_H};
RESULT Result;
if(flag==0)
{
if(SearchCentre(&x0,&y0,Condition,&Area))
flag=1;
else
{
Area.X_Start= IMG_X ;
Area.X_End = IMG_X+IMG_W ;
Area.Y_Start= IMG_Y ;
Area.Y_End = IMG_Y+IMG_H;
if(SearchCentre(&x0,&y0,Condition,&Area))
{
flag=0;
return 0;
}
}
}
Result.x = x0;
Result.y = y0;
for(i=0;i<ITERATE_NUM;i++)
Corrode(Result.x,Result.y,Condition,&Result);
if(Corrode(Result.x,Result.y,Condition,&Result))
{
x0=Result.x;
y0=Result.y;
Resu->x=Result.x;
Resu->y=Result.y;
Resu->w=Result.w;
Resu->h=Result.h;
flag=1;
Area.X_Start= Result.x - ((Result.w)>>1);
Area.X_End = Result.x + ((Result.w)>>1);
Area.Y_Start= Result.y - ((Result.h)>>1);
Area.Y_End = Result.y + ((Result.h)>>1);
return 1;
}
else
{
flag=0;
return 0;
}
}
主函数调用部分,我是把trace放在了主函数里的void DCMI_IRQHandler(void)里面
void DCMI_IRQHandler(void)
{
if( DCMI_GetITStatus (DCMI_IT_FRAME) == SET )
{
/*传输完一帧,计数复位*/
fps++; //帧率计
if(Trace(&Condition,&Resu))
{
ILI9806G_DrawRectangle ( Resu.x-Resu.w/2, Resu.y-Resu.h/2, Resu.w, Resu.h, 0 );
ILI9806G_DrawRectangle ( Resu.x-2, Resu.y-2, 4, 4, 1 );
}
ILI9806G_OpenWindow(0,0,img_width,img_height);
OV2640_Capture_Control(ENABLE);
DCMI_ClearITPendingBit(DCMI_IT_FRAME);
}
}
因为用的是火哥霸天虎摄像头的例程,所以液晶初始化的和摄像头初始化的顺序应该是没问题的,还有一点我觉得可能有问题得地方是
//读取RBG格式颜色,唯一需要移植的函数
extern unsigned short GUI_ReadBit16Point(unsigned short x,unsigned short y);
#define GUI_ReadBit16Point ILI9806G_GetPointPixel f1的颜色识别例程里面是这样调用的,(我猜测可能是由于f1和f4的差异造成的,但是还是想不通为啥一调用就白屏)
代码超过10M上次不了,不然完全上传,希望大佬能帮我解解惑,实在想不出为啥白屏。
|
|