2012-07-24 295 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