标签:
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