class RotatedRect
{
public:
RotatedRect(); //構造函數
RotatedRect(const Point2f& center, const Size2f& size, float angle);
RotatedRect(const CvBox2D& box);
void points(Point2f pts[]) const; //返回矩形的4個頂點
Rect boundingRect() const; //返回包含旋轉矩形的最小矩形
operator CvBox2D() const; //轉換到舊式的cvbox2d結構
float angle; //旋轉角度,當角度爲0、90、180、270等時,矩形就成了一個直立的矩形
Point2f center; //矩形的質心
Size2f size; //矩形的邊長
}
類中定義了矩形的中心點center、尺寸size(包括width、height)、旋轉角度angle共三種成員變量;
points()函數用於求矩形的4個頂點,
boundingRect()函數求包含最小外接矩形的,與座標軸平行(或垂直)的最小矩形。
下圖爲成員變量的對應關係
根據上圖,需要關注以下幾個點:
- Opencv採用通用的圖像座標系,左上角爲原點O(0,0),X軸向右遞增,Y軸向左遞增。
單位是像素。
- 矩形4個頂點位置的確定,是理解其他各變量的基礎,其中p[0]點是關鍵。
頂點p[0]的位置可以這樣理解:
1)如果沒有對邊與Y軸平行,則Y座標最大的點爲p[0]點,如矩形(2)(3)(4);
2)如果有對邊與Y軸平等,則有兩個Y座標最大的點,此時,取左側的點爲p[0],如矩形(1)。
- p[0]~p[3]按順時針依次排列。
- p[0]到p[3]之間的距離爲寬width,其相鄰邊長爲高height。
- 角度angle以穿過p[0],且平行於X軸的直線爲起始邊,按逆時針方向旋轉到寬邊p[0]p[3]所經過的角度。取負值,取值範圍爲(-90,0]。
- 中心點center 爲矩形對角線的交點。