1. 程式人生 > >【OpenCV3影象處理】RotatedRect類 詳解

【OpenCV3影象處理】RotatedRect類 詳解

RotatedRect是一個儲存旋轉矩形的類,通常用來儲存最小外包矩形函式minAreaRect( )和橢圓擬合函式fitEllipse( )返回的結果。儲存的值,完全取決在於函式的返回

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;    //矩形的邊長      
}

OpenCV中,座標的原點在左上角,與x軸平行的方向為角度為0,逆時針旋轉角度為負,順時針旋轉角度為正

minAreaRect( )函式和fitEllipse( )函式返回值不太一樣

minAreaRect( )函式

返回的引數,請看下圖:


角度引數angle 是矩形最下面的點(y座標最大)P[0]發出的平行於x軸的射線,逆時針旋轉,與碰到的第一個邊的夾角(這個邊的邊長就作為width),取值範圍[-90~0]。

成員函式

void points(Point2f pts[]) const;      //返回矩形的4個頂點
可以計算出矩形的四個角點。計算出來的角點是固定的順序,如圖所示。

在利用minAreaRect函式去求一個外接矩形時,函式對於矩形長和寬的選擇取決於這個外接矩形的邊與水平軸的角度距離,即將水平軸逆時針旋轉,最先與其平行的邊的長度作為寬度width,另外一條邊則為height,而角度則直接取該邊與水平軸的夾角。應該意識到,在minAreaRect函式中,RotatedRect的width和height的選取跟矩形的尺寸無關,並非長的就是height,短的就是width。

fitEllipse( )函式

返回的引數,請看下圖:


角度引數angle 是橢圓中心center發出的平行於x軸的射線,順時針旋轉,與橢圓短軸的夾角,取值範圍 [ 0 ~ 180 ] 橢圓的短軸為引數size裡面的第一個引數width,長軸為引數size裡面的第二個引數height。