一.OPENCV圖形面積、弧長計算的API介紹
之前我們已經把圖形輪廓的檢測、畫框等功能講解了一遍。那今天我們主要結合輪廓檢測的API去計算圖形的面積,這些面積可以是矩形、圓形等等。圖形面積計算和弧長計算常用于車輛識別、橋梁識別等重要功能,常用的API如contourArea、arcLength、minAreaRect、boundingRect、rectangle、line等等。
1.contourArea的API講解
作用:計算輪廓的曲線面積,也就是去計算圖像本身的面積,計算的過程一般是用微積分等方式去計算。
CV_EXPORTS_W double contourArea( InputArray contour, bool oriented = false );
第一個參數:contour指的是每一個輪廓的數據,也稱之為輪廓的點
第二個參數:oriented表示的是某一個方向上輪廓的面積值
返回值:計算后的輪廓面積
2.arcLength的API講解
作用:是計算輪廓的周長,也就是圖形形狀本身的曲線弧度周長
CV_EXPORTS_W double arcLength( InputArray curve, bool closed );
第一個參數:curve輪廓曲線的2D像素點
第二個參數:closed輪廓或者曲線是否閉合標志,true表示閉合
返回值:計算后的輪廓周長
3.minAreaRect的API講解
作用:是計算最小的外接矩形,最小外接矩形指的是找到一個矩形能夠完全包裹所有的給定點,并且這個矩形是最小的。
如下圖:從下圖我們可以看到8這個形狀,被minAreaRect的矩形包圍了。這個矩形包含了整個形狀的所有點,更重要的這個矩形具有旋轉功能,這個8實際上有傾斜的角度,而這個最小矩形也能夠完美包含進來。
CV_EXPORTS_W RotatedRect minAreaRect( InputArray points );
第一個參數:points輸入的二維點數,可以Mat類型也可以是std::vector的向量類型
返回值:RotatedRect的矩形對象, 它表示的是一個輪廓的最小外接矩形,
我們來看看RotatedRect結構體成員變量
center:旋轉矩形的質心
size:旋轉矩形的寬度和高度
angle:順時針的旋轉角度。
RotatedRect的四個點的確定
?
在RotatedRect中矩形四個點通常用Point2f來表示,其中p[0]點的確定是最關鍵的,p[0]的位置通常分為兩種情況:
- 如果當前最小外接矩形沒有與坐標軸平行,則Y坐標最大的為點p[0],如2,3,4三張圖
- 如果當前最小矩形和坐標軸平行,則有兩個Y坐標最大的點,如圖1
4.boundingRect的API講解
作用:是計算圖形輪廓垂直邊界的最小矩形,這個矩形必須要和圖像是上下邊界平行的。
我們看上圖:我們還是看8這個形狀依然還是之前的位置,然后boundingRect產生的矩形對整個8進行垂直邊界包圍。
CV_EXPORTS_W Rect boundingRect( InputArray array );
第一個參數:array輸入的灰度圖像或者2D點集,數據類型為vector或者Mat矩陣數據
返回值:Rect的矩形對象,它表示的是物體輪廓的最大外接矩形。我們來看看Rect主要的成員變量
Rect結構體
x:矩形的x坐標軸
y: 矩形的y坐標軸
width:矩形的寬度
height:矩形的高度
?5.rectangle的API講解
?作用:是繪制矩形,它有兩種表示形式
1.以兩個頂點的方式畫矩形
void cv::rectangle(InputOutputArray img,Point pt1,Point pt2,const Scalar & color,int? thickness = 1,int? lineType = LINE_8, int? shift = 0)
第一個參數:輸入的矩陣圖像數據
第二個參數:pt1是矩形的一個頂點,左上角的頂點
第三個參數:pt2矩形中與pt1相對的頂點,也就是兩個點在對角線上,也就是右下角的頂點
第四個參數:Scalar顏色的標量
第五個參數:thickness線寬
第六個參數:lineType線的類型,默認是LINE_8就行,具體的類型如下圖:
第七個參數:shift坐標的小數點位,默認為0就可以
2.以Rect的方式畫矩形
void cv::rectangle(InputOutputArray img,Rect rec,const Scalar & color, int? thickness = 1,int? lineType = LINE_8, int? shift = 0)??
第一個參數:輸入的矩陣圖像數據
第二個參數:Rect的結構體,我們來看看這個Rect的重要成員變量
x:矩形的x坐標軸
y: 矩形的y坐標軸
width:矩形的寬度
height:矩形的高度
第三個參數:Scalar顏色的標量
第四個參數:thickness線寬,默認是1
第五個參數:lineType線的類型,默認是LINE_8就行,line的類型如下:
第六個參數:shift坐標點的小數點位
6.line的API講解
?作用:是通過兩個點繪制直線
CV_EXPORTS_W void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,int thickness = 1, int lineType = LINE_8, int shift = 0);
第一個參數:輸入的矩陣圖像數據
第二個參數:pt1是線的起始坐標,也就是圖上x1坐標和y1坐標
第三個參數:pt2是線的終點坐標,也就是圖上x2坐標和y2坐標
第四個參數:Scalar是顏色標量,繪制直線的顏色
第五個參數:thickness它是線的粗細程度,默認為1
第六個參數:lineType線的類型,默認是LINE_8就行,具體的類型
第七個參數:shift坐標點的小數點位數