|
|
|
@ -525,7 +525,7 @@ icvFetchContour( schar *ptr, |
|
|
|
|
int prev_s = -1, s, s_end; |
|
|
|
|
int method = _method - 1; |
|
|
|
|
|
|
|
|
|
assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
CV_DbgAssert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
|
|
|
|
|
/* initialize local state */ |
|
|
|
|
CV_INIT_3X3_DELTAS( deltas, step, 1 ); |
|
|
|
@ -557,6 +557,7 @@ icvFetchContour( schar *ptr, |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
i3 = i0; |
|
|
|
|
CV_Assert(i3 != NULL); |
|
|
|
|
prev_s = s ^ 4; |
|
|
|
|
|
|
|
|
|
/* follow border */ |
|
|
|
@ -568,6 +569,7 @@ icvFetchContour( schar *ptr, |
|
|
|
|
while( s < MAX_SIZE - 1 ) |
|
|
|
|
{ |
|
|
|
|
i4 = i3 + deltas[++s]; |
|
|
|
|
CV_Assert(i4 != NULL); |
|
|
|
|
if( *i4 != 0 ) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -615,7 +617,7 @@ icvFetchContour( schar *ptr, |
|
|
|
|
if( _method != CV_CHAIN_CODE ) |
|
|
|
|
cvBoundingRect( contour, 1 ); |
|
|
|
|
|
|
|
|
|
assert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
CV_DbgAssert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
writer.seq->total > writer.seq->first->count || |
|
|
|
|
(writer.seq->first->prev == writer.seq->first && |
|
|
|
|
writer.seq->first->next == writer.seq->first) ); |
|
|
|
@ -638,7 +640,7 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) |
|
|
|
|
CV_INIT_3X3_DELTAS( deltas, step, 1 ); |
|
|
|
|
memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] )); |
|
|
|
|
|
|
|
|
|
assert( (*i0 & -2) != 0 ); |
|
|
|
|
CV_DbgAssert( (*i0 & -2) != 0 ); |
|
|
|
|
|
|
|
|
|
s_end = s = is_hole ? 0 : 4; |
|
|
|
|
|
|
|
|
@ -650,6 +652,7 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) |
|
|
|
|
while( *i1 == 0 && s != s_end ); |
|
|
|
|
|
|
|
|
|
i3 = i0; |
|
|
|
|
CV_Assert(i3 != NULL); |
|
|
|
|
|
|
|
|
|
/* check single pixel domain */ |
|
|
|
|
if( s != s_end ) |
|
|
|
@ -662,6 +665,7 @@ icvTraceContour( schar *ptr, int step, schar *stop_ptr, int is_hole ) |
|
|
|
|
while( s < MAX_SIZE - 1 ) |
|
|
|
|
{ |
|
|
|
|
i4 = i3 + deltas[++s]; |
|
|
|
|
CV_Assert(i4 != NULL); |
|
|
|
|
if( *i4 != 0 ) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -693,8 +697,8 @@ icvFetchContourEx( schar* ptr, |
|
|
|
|
int prev_s = -1, s, s_end; |
|
|
|
|
int method = _method - 1; |
|
|
|
|
|
|
|
|
|
assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
assert( 1 < nbd && nbd < 128 ); |
|
|
|
|
CV_DbgAssert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
CV_DbgAssert( 1 < nbd && nbd < 128 ); |
|
|
|
|
|
|
|
|
|
/* initialize local state */ |
|
|
|
|
CV_INIT_3X3_DELTAS( deltas, step, 1 ); |
|
|
|
@ -799,7 +803,7 @@ icvFetchContourEx( schar* ptr, |
|
|
|
|
if( _method != CV_CHAIN_CODE ) |
|
|
|
|
((CvContour*)contour)->rect = rect; |
|
|
|
|
|
|
|
|
|
assert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
CV_DbgAssert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
writer.seq->total > writer.seq->first->count || |
|
|
|
|
(writer.seq->first->prev == writer.seq->first && |
|
|
|
|
writer.seq->first->next == writer.seq->first) ); |
|
|
|
@ -882,7 +886,7 @@ icvFetchContourEx_32s( int* ptr, |
|
|
|
|
const int nbd0 = ccomp_val | new_flag; |
|
|
|
|
const int nbd1 = nbd0 | right_flag; |
|
|
|
|
|
|
|
|
|
assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
CV_DbgAssert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE ); |
|
|
|
|
|
|
|
|
|
/* initialize local state */ |
|
|
|
|
CV_INIT_3X3_DELTAS( deltas, step, 1 ); |
|
|
|
@ -984,7 +988,7 @@ icvFetchContourEx_32s( int* ptr, |
|
|
|
|
if( _method != CV_CHAIN_CODE ) |
|
|
|
|
((CvContour*)contour)->rect = rect; |
|
|
|
|
|
|
|
|
|
assert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
CV_DbgAssert( (writer.seq->total == 0 && writer.seq->first == 0) || |
|
|
|
|
writer.seq->total > writer.seq->first->count || |
|
|
|
|
(writer.seq->first->prev == writer.seq->first && |
|
|
|
|
writer.seq->first->next == writer.seq->first) ); |
|
|
|
|