我需要使用 OpenCV 计算灰度图片中的斑点/对象的面积(将其加载为Mat,而不是IplImage)。
我认为获取边缘的坐标(边缘数量从对象变为对象)或获取轮廓的所有坐标然后使用contourArea()
来计算对象的面积是个好主意。 / p>
我使用findContours()
(在 C ++中编程)删除了所有噪音,并获得了一些不错且令人满意的轮廓。
findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point());
现在我明白了param contours
已经拥有了我对象的所有轮廓的坐标。我做对了吗?
如果是,有没有办法访问它们?
如果不是,我怎样才能得到轮廓的坐标?
答案 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;
}