有没有办法从轮廓中删除小线段?
例如,在此图像中,最大轮廓由绿色指定,其近似值由蓝色指定:
由于轮廓是一组点,我想我们可以做些什么来删除红色圆圈中的轮廓线段。例如,通过检测和去除小线或小子轮廓或其他方式。但我不知道怎么做。
请记住我想在找到轮廓之后删除它们而不是之前。你知道我怎么能删除它们吗?或者任何想法?
答案 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。原始轮廓的粗略近似可能会忽略无关的特征。