获取OpenCV中RotatedRect的绝对角度

来源:互联网 发布:新疆广电网络上市辅导 编辑:程序博客网 时间:2024/05/22 03:42

opencv中RotatedRect的angle这个成员变量总是诡异的不同寻(http://stackoverflow.com/questions/15956124/minarearect-angles-unsure-about-the-angle-returned),官网也没有任何解释。

下面是获取RotatedRect的绝对角度(0-180)的函数:

复制代码
static double calcLineDegree(const Point2f& firstPt, const Point2f& secondPt){    double curLineAngle = 0.0f;    if (secondPt.x - firstPt.x != 0)    {        curLineAngle = atan(static_cast<double>(firstPt.y - secondPt.y) / static_cast<double>(secondPt.x - firstPt.x));        if (curLineAngle < 0)        {            curLineAngle += CV_PI;        }    }    else    {        curLineAngle = CV_PI / 2.0f; //90度    }    return curLineAngle*180.0f/CV_PI;}static double getRcDegree(const RotatedRect box){    double degree = 0.0f;    Point2f vertVect[4];    box.points(vertVect);    //line 1    const double firstLineLen = (vertVect[1].x - vertVect[0].x)*(vertVect[1].x - vertVect[0].x) +        (vertVect[1].y - vertVect[0].y)*(vertVect[1].y - vertVect[0].y);    //line 2    const double secondLineLen = (vertVect[2].x - vertVect[1].x)*(vertVect[2].x - vertVect[1].x) +        (vertVect[2].y - vertVect[1].y)*(vertVect[2].y - vertVect[1].y);    if (firstLineLen > secondLineLen)    {        degree = calcLineDegree(vertVect[0], vertVect[1]);    }    else    {        degree = calcLineDegree(vertVect[2], vertVect[1]);    }    return degree;}
复制代码

转载自:http://www.cnblogs.com/xylc/p/4269624.html

原创粉丝点击