2012-07-24 658 views
9

我需要使用OpenCV來計算灰度圖片中的blob /對象的面積(將其作爲Mat加載,而不是IplImage)。 我認爲這將是一個好主意,以獲得邊緣的座標(邊的數量改變對象的形式對象)或獲得輪廓的所有座標,然後使用contourArea()來計算我的對象的面積。使用OpenCV計算對象的面積

我刪除了所有的噪音,並通過使用findContours()(編程在C++)得到了一些不錯的和令人滿意的輪廓。

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point()); 

現在我明白PARAM contours已經擁有我的對象的所有輪廓的座標。我有沒有得到那個權利?

如果是的話,有沒有辦法訪問它們?

如果否,我該如何獲得輪廓的座標?

回答

23

contours實際上是定義爲

vector<vector<Point> > contours; 

現在我想很明顯如何訪問它的點。

輪廓區域由一個好聽一點叫contourArea()函數計算:

for (unsigned int i = 0; i < contours.size(); i++) 
{ 
    std::cout << "# of contour points: " << contours[i].size() << std::endl; 

    for (unsigned int j=0; j<contours[i].size(); j++) 
    { 
     std::cout << "Point(x,y)=" << contours[i][j] << std::endl; 
    } 

    std::cout << " Area: " << contourArea(contours[i]) << std::endl; 
} 
+1

非常感謝!花了一段時間才明白你在做什麼,但據我可以說從現在開始工作:)已經坐在這個問題上好幾天沒有看到任何解決方案... – Temer 2012-07-24 14:20:54

+0

閱讀文檔本來可以爲你節省很多時間 :) 。 OpenCV附帶的示例代碼也很棒。 – Sam 2012-07-24 14:23:28