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

当找到轮廓时,我使用CV_RETR_CCOMP参数。这应该创建一个两级层次结构 – 第一级为外轮廓,第二级为孔的边界。但是,我从来没有使用过层次结构,所以我不熟悉这一点。

有人可以告诉我如何访问洞的边界?我想忽略外轮廓,只画出孔边界。代码示例将不胜感激。我使用C接口不是C,所以请不要建议C函数(即使用findContours(),而不是cvFindContours())。

findContours返回的层次结构具有以下形式:
层次[idx] [{0,1,2,3}] = {下一个轮廓(相同级别),上一个轮廓(相同级别),子轮廓,父轮廓}

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

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

这意味着你基本上通过层次结构[idx],并绘制任何层次结构[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 );
        }
    }
}
http://stackoverflow.com/questions/8461612/using-hierarchy-in-findcontours-in-opencv

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 在OpenCV中的findContours()中使用层次结构?