在得到圆心信息和直线信息后,需要通过这些信息把他们转化为角度信息,在转化为我们需要的参数信息,这里需要用到math.h头文件中的反切函数,即
atan2(x, y)
这个函数是以x,y相对于0,0点的位置在不同象限上进行计算的,输出范围为-pi,pi,因此需要对它的输出值进行一定的转化,在OpenCV中,图像坐标系和常用的坐标系如下图:
故除第三象限,其他象限都为(3 * pi / 2) * ( - 原角度),第三象限为(pi / 2) * ( - 原角度),角度纠正代码如下:
float CalculateValue() {
float angle = 0;
float x, y;
x = cho_l[2] - cho_l[0];
y = -(cho_l[3] - cho_l[1]);
// Angle Correction
if (cho_l[2] > circle_center.x)
if (cho_l[3] > circle_center.y)
// first quadrant
angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
else
// second quadrant
angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
else
if (cho_l[3] < circle_center.y)
// third quadrant
angle = ((-3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
else
// fourth quadrant
angle = ((3 * 3.14159 / 2) - atan2(x, y)) * 180 / 3.14159;
return angle;
}
输出结果图:
欢迎评论文章,给予宝贵建议,工程提供在github下载学习,请关注作者,共同学习交流。