中级会员
 
- 积分
- 211
- 金钱
- 211
- 注册时间
- 2017-6-16
- 在线时间
- 46 小时
|

楼主 |
发表于 2018-6-5 17:06:09
|
显示全部楼层
关键程序是下面这个:for(x=0;x<76800;x++)//320*240=76800个像素点
{
READ_FIFO_PIXEL(Camera_Data); /* FIFO读摄像头数据 */
ILI9341_Write_Data(Camera_Data); //LCD屏幕显示像素点
//RGB565分离出像素分量
red = (Camera_Data & RGB565_MASK_RED) >> 11;
green = (Camera_Data & RGB565_MASK_GREEN) >> 5;
blue = (Camera_Data & RGB565_MASK_BLUE);
red <<= 3;
green <<= 2;
blue <<= 3;
if((red>=200)&&(green==252)&&(blue==248))//找出红外光点
{
m=x/320; //算出光点的行列
n=x%320;
if(m>a) a=m;
if(m<b) b=m; //确定最大最小行
if(n>c) c=n; //确定最大最小列
if(n<d) d=n;
}
}
m=c-d+1;n=a-b+1;//算出光点区域的宽度和高度 对于矩形光斑比较适用,对于不规则光斑,可能会出现不准
p=(float)b+n/2+n%2;q=(float)d+m/2+n%2;//算出光点的中心位置 问题就是这个方法不太好,光点比较规则这个办法可以 但有的目标上,光斑没啥规则
l=0.02025*sqrt((p-119.5)*(p-119.5)+(q-159.5)*(q-159.5));//算出光点中心离屏幕中心的距离 每个像素点宽度为0.02025cm 屏幕320*240
printf("(%f,%f) %f\r\n",p,q,l); //打印
ILI9341_DrawRectangle(d,b,m,n,0); //在屏幕上画矩形框将光点圈起来
}
|
|