2

有没有办法从轮廓中删除小线段?

例如,在此图像中,最大轮廓由绿色指定,其近似值由蓝色指定:

在此处输入图像描述

由于轮廓是一组点,我想我们可以做一些事情来删除红色圆圈中的轮廓段。例如通过检测和去除小线条或小子轮廓或其他方式。但我不知道我该怎么做。

请记住我想在找到轮廓后删除它们,而不是在那之前。你知道我怎样才能删除它们吗?或者有什么想法?

4

1 回答 1

1

我发现 contourArea 可以很好地去除小的、孤立的轮廓。此代码段说明了您可以如何进行:

findContours(edges, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);

...

// Prune contours
vector<vector<Point> > prunedContours;
for (size_t i = 0; i< contours.size(); i++)
     {
         if (contourArea(contours[i]) > minArea)
         {
           prunedContours.push_back(contours[i]);
         }
     }

如果“循环”或无关轮廓区域是感兴趣的较大轮廓的一部分,请查看approxPolyDP。原始轮廓的粗略近似可能会忽略无关特征。

于 2014-10-10T14:38:25.977 回答