使用OpenCV计算对象的面积

Tem*_*mer 9 c++ opencv contour

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

我删除了所有的噪音,并通过使用findContours()(在C++中编程)获得了一些漂亮和令人满意的轮廓.

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point());
Run Code Online (Sandbox Code Playgroud)

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

如果是的话,它有办法访问它们吗?

如果不是,我怎么得到轮廓的坐标呢?

Sam*_*Sam 24

contours 实际上定义为

vector<vector<Point> > contours;
Run Code Online (Sandbox Code Playgroud)

现在我认为很清楚如何获得它的观点.

轮廓区域由一个很好地称为的函数计算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;
}
Run Code Online (Sandbox Code Playgroud)