转自:http://blog.csdn.net/u012767067/article/details/19402239
以下代码返回的角度范围是0-360
/************************************************************************
*函数名: get_point_angle
*
*函数作用: 已知2个坐标点,求从 0------->x 逆时针需旋转多少角度到该位置
*
* |
* |
* |
* |
*------------------------------------> x
* | 0
* |
* |
* |
* v
* y
*
*函数参数:
*CvPoint2D32f pointO - 起点
*CvPoint2D32f pointA - 终点
*
*函数返回值:
*double 向量OA,从 0------->x 逆时针需旋转多少角度到该位置
**************************************************************************/
double get_point_angle(CvPoint pointO,CvPoint pointA)
{
double angle = 0;
CvPoint point;
double temp;
point = cvPoint((pointA.x - pointO.x), (pointA.y - pointO.y));
if ((0==point.x) && (0==point.y))
{
return 0;
}
if (0==point.x)
{
angle = 90;
return angle;
}
if (0==point.y)
{
angle = 0;
return angle;
}
temp = fabsf(float(point.y)/float(point.x));
temp = atan(temp);
temp = temp*180/CV_PI ;
if ((0<point.x)&&(0<point.y))
{
angle = 360 - temp;
return angle;
}
if ((0>point.x)&&(0<point.y))
{
angle = 360 - (180 - temp);
return angle;
}
if ((0<point.x)&&(0>point.y))
{
angle = temp;
return angle;
}
if ((0>point.x)&&(0>point.y))
{
angle = 180 - temp;
return angle;
}
printf("sceneDrawing :: getAngle error!");
return -1;
}
根据倾斜角度倾斜校正应用