zoukankan      html  css  js  c++  java
  • 获取OpenCV中RotatedRect的绝对角度

    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;
    }
  • 相关阅读:
    14.3
    14.2
    14.1
    第14章 抽象类和接口
    13.5
    JAVA异常处理
    12.9
    12.7
    vs 常用快捷键
    click()和onclick()的区别
  • 原文地址:https://www.cnblogs.com/xylc/p/4269624.html
Copyright © 2011-2022 走看看