使用OpenCV计算对象的面积

时间:2012-07-24 13:06:54

标签: c++ opencv contour

我需要使用 OpenCV 计算灰度图片中的斑点/对象的面积(将其加载为Mat,而不是IplImage)。 我认为获取边缘的坐标(边缘数量从对象变为对象)或获取轮廓的所有坐标然后使用contourArea()来计算对象的面积是个好主意。 / p>

我使用findContours()(在 C ++中编程)删除了所有噪音,并获得了一些不错且令人满意的轮廓。

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

现在我明白了param contours已经拥有了我对象的所有轮廓的坐标。我做对了吗?

如果是,有没有办法访问它们?

如果不是,我怎样才能得到轮廓的坐标?

1 个答案:

答案 0 :(得分:25)

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;
}