@ -126,8 +126,6 @@ private:
int d_C1 , int d_C2 , int d_C3 ) ;
int d_C1 , int d_C2 , int d_C3 ) ;
// merge an ER with its nested parent
// merge an ER with its nested parent
void er_merge ( ERStat * parent , ERStat * child ) ;
void er_merge ( ERStat * parent , ERStat * child ) ;
// recursively walk the tree and clean memory
void er_tree_clean ( ERStat * er ) ;
// copy extracted regions into the output vector
// copy extracted regions into the output vector
ERStat * er_save ( ERStat * er , ERStat * parent , ERStat * prev ) ;
ERStat * er_save ( ERStat * er , ERStat * parent , ERStat * prev ) ;
// recursively walk the tree and filter (remove) regions using the callback classifier
// recursively walk the tree and filter (remove) regions using the callback classifier
@ -486,7 +484,17 @@ void ERFilterNM::er_tree_extract( InputArray image )
er_save ( er_stack . back ( ) , NULL , NULL ) ;
er_save ( er_stack . back ( ) , NULL , NULL ) ;
// clean memory
// clean memory
er_tree_clean ( er_stack . back ( ) ) ;
for ( size_t r = 0 ; r < er_stack . size ( ) ; r + + )
{
ERStat * stat = er_stack . at ( r ) ;
if ( stat - > crossings )
{
stat - > crossings - > clear ( ) ;
delete ( stat - > crossings ) ;
stat - > crossings = NULL ;
}
delete stat ;
}
er_stack . clear ( ) ;
er_stack . clear ( ) ;
return ;
return ;
@ -678,22 +686,6 @@ void ERFilterNM::er_merge(ERStat *parent, ERStat *child)
}
}
// recursively walk the tree and clean memory
void ERFilterNM : : er_tree_clean ( ERStat * stat )
{
for ( ERStat * child = stat - > child ; child ; child = child - > next )
{
er_tree_clean ( child ) ;
}
if ( stat - > crossings )
{
stat - > crossings - > clear ( ) ;
delete ( stat - > crossings ) ;
stat - > crossings = NULL ;
}
delete stat ;
}
// copy extracted regions into the output vector
// copy extracted regions into the output vector
ERStat * ERFilterNM : : er_save ( ERStat * er , ERStat * parent , ERStat * prev )
ERStat * ERFilterNM : : er_save ( ERStat * er , ERStat * parent , ERStat * prev )
{
{