Imgproc.findContours函數


OpenCV里支持很多邊緣提取的辦法,可是如何在一幅圖像里得到輪廓區域的參數呢,這就需要用到findContours函數,這個函數在OpenCV4Android的原型為:

void org.opencv.imgproc.Imgproc.findContours(Mat image, List<MatOfPoint> contours, Mat hierarchy, int mode, int method)


image參數為已經二值化的原圖

contours參數為檢測的輪廓數組,每一個輪廓用一個MatOfPoint類型的List表示

hiararchy參數和輪廓個數相同,每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別表示后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,該值設置為負數。

mode表示輪廓的檢索模式例如:
 

CV_RETR_EXTERNAL表示只檢測外輪廓
 
CV_RETR_LIST檢測的輪廓不建立等級關系
 
CV_RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。
 
CV_RETR_TREE建立一個等級樹結構的輪廓。
 

method為輪廓的近似辦法  

CV_CHAIN_APPROX_NONE存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))==1  
CV_CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息  
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

 

findContours經常與drawContours配合使用,用來將輪廓繪制出來。還可以得到輪廓的外包絡矩形,使用函數boundingRect,如果想得到旋轉的外包絡矩形,使用函數minAreaRect,返回值為RotatedRect;
也可以得到輪廓的外包絡圓,對應的函數為minEnclosingCircle;想得到輪廓的外包絡橢圓,對應的函數為fitEllipse,返回值也是RotatedRect;可以用ellipse函數畫出對應的橢圓。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM