智能车摄像头动态打角算法
核心代码
void xiaocao_function()
{
byte i, j;
for (i = 0; i < final_line; i++)
{
for (j = 0; j < i; j++)
{
xiaocao = (byte)(Lcr[0].Center + (Lcr[i].Center - Lcr[0].Center) * j / i);
if (j < 30)
{
if (Lcr[j].Center > xiaocao + 4 || Lcr[j].Center + 4 < xiaocao)
break;
}
else
{
if (Lcr[j].Center > xiaocao + 4 || Lcr[j].Center + 4 < xiaocao)
break;
}
}
if (i == j)
{
xiaocao = i;
}
else
{
xiaocao = j;
xiaocao_h = i;
break;
}
}
if (xiaocao_h != 0)
{
xiaocao_k = (byte)((Lcr[xiaocao].Center - Lcr[0].Center) * 10 / xiaocao);
xiaocao_k = (byte)((Lcr[0].Center - Lcr[xiaocao].Center) * 10 / xiaocao);
//setText用户自定义("xiaocao" + xiaocao);
//setText用户自定义("xiaocao_h" + xiaocao_h);
//setText用户自定义("xiaocao_k" + xiaocao_k);
}
}
void angle_line_choose()
{
byte angle_line_last = angle_line;
angle_line = (byte)(xiaocao_h - 4);
//打角行平滑变化
angle_line = (byte)((angle_line - angle_line_last > 1) ? angle_line_last + 1 : angle_line);
angle_line = (byte)((angle_line - angle_line_last < -1) ? angle_line_last - 1 : angle_line);//减短加快
//打角行限幅
angle_line = (byte)((angle_line > 41) ? 41 : angle_line);
angle_line = (byte)((angle_line < 31) ? 31 : angle_line);
angle_line = (byte)((angle_line < final_line) ? angle_line : final_line);//防止打角行超出截止行
//setText用户自定义("angle_line" + angle_line);
}
后面有时间再详细解释一下原理。