OpenCV - 如何从轮廓中删除小线段?

时间:2014-10-10 14:23:23

标签: opencv image-processing opencv-contour

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分: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]);
         }
     }

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