在OpenCV中的findContours()中使用层次结构?

2024-02-16

在查找轮廓时,我使用了 CV_RETR_CCOMP 参数。这应该创建一个两级层次结构 - 第一级用于外部轮廓,第二级用于孔的边界。然而,我以前从未使用过层次结构,所以我对此并不熟悉。

有人可以指导我如何仅进入孔的边界吗?我想忽略外部轮廓,只绘制孔边界。代码示例将不胜感激。我使用的是 C++ 接口而不是 C,所以请不要建议使用 C 函数(即使用 findContours () 而不是 cvFindContours ())。


返回的层次结构findContours具有以下形式:hierarchy[idx][{0,1,2,3}]={next contour (same level), previous contour (same level), child contour, parent contour}

CV_RETR_CCOMP,返回外部轮廓和孔的层次结构。 这意味着元素 2 和 3hierarchy[idx]其中最多有一个不等于 -1:也就是说,每个元素要么没有父元素,要么没有子元素,或者有父元素但没有子元素,或者有子元素但没有父元素。

具有父元素但没有子元素的元素将是孔的边界。

这意味着你基本上会经历hierarchy[idx]并绘制任何东西hierarchy[idx][3]>-1.

类似的东西(在Python中工作,但还没有测试C++。不过想法很好。):

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

if ( !contours.empty() && !hierarchy.empty() ) {

    // loop through the contours/hierarchy
    for ( int i=0; i<contours.size(); i++ ) {

        // look for hierarchy[i][3]!=-1, ie hole boundaries
        if ( hierarchy[i][3] != -1 ) {
            // random colour
            Scalar colour( (rand()&255), (rand()&255), (rand()&255) );
            drawContours( outImage, contours, i, colour );
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在OpenCV中的findContours()中使用层次结构? 的相关文章

随机推荐