Home | History | Annotate | Download | only in src

Lines Matching refs:scanner

160     CvPoint pt;                 /* current scanner position */
189 Initializes scanner structure.
201 CvContourScanner scanner = 0;
226 scanner = (CvContourScanner)cvAlloc( sizeof( *scanner ));
227 if( !scanner )
230 memset( scanner, 0, sizeof( *scanner ));
232 scanner->storage1 = scanner->storage2 = storage;
233 scanner->img0 = (schar *) img;
234 scanner->img = (schar *) (img + step);
235 scanner->img_step = step;
236 scanner->img_size.width = size.width - 1; /* exclude rightest column */
237 scanner->img_size.height = size.height - 1; /* exclude bottomost row */
238 scanner->mode = mode;
239 scanner->offset = offset;
240 scanner->pt.x = scanner->pt.y = 1;
241 scanner->lnbd.x = 0;
242 scanner->lnbd.y = 1;
243 scanner->nbd = 2;
244 scanner->mode = (int) mode;
245 scanner->frame_info.contour = &(scanner->frame);
246 scanner->frame_info.is_hole = 1;
247 scanner->frame_info.next = 0;
248 scanner->frame_info.parent = 0;
249 scanner->frame_info.rect = cvRect( 0, 0, size.width, size.height );
250 scanner->l_cinfo = 0;
251 scanner->subst_flag = 0;
253 scanner->frame.flags = CV_SEQ_FLAG_HOLE;
255 scanner->approx_method2 = scanner->approx_method1 = method;
258 scanner->approx_method1 = CV_CHAIN_CODE;
260 if( scanner->approx_method1 == CV_CHAIN_CODE )
262 scanner->seq_type1 = CV_SEQ_CHAIN_CONTOUR;
263 scanner->header_size1 = scanner->approx_method1 == scanner->approx_method2 ?
265 scanner->elem_size1 = sizeof( char );
269 scanner->seq_type1 = CV_SEQ_POLYGON;
270 scanner->header_size1 = scanner->approx_method1 == scanner->approx_method2 ?
272 scanner->elem_size1 = sizeof( CvPoint );
275 scanner->header_size2 = header_size;
277 if( scanner->approx_method2 == CV_CHAIN_CODE )
279 scanner->seq_type2 = scanner->seq_type1;
280 scanner->elem_size2 = scanner->elem_size1;
284 scanner->seq_type2 = CV_SEQ_POLYGON;
285 scanner->elem_size2 = sizeof( CvPoint );
288 scanner->seq_type1 = scanner->approx_method1 == CV_CHAIN_CODE ?
291 scanner->seq_type2 = scanner->approx_method2 == CV_CHAIN_CODE ?
294 cvSaveMemStoragePos( storage, &(scanner->initial_pos) );
298 scanner->storage1 = cvCreateChildMemStorage( scanner->storage2 );
303 scanner->cinfo_storage = cvCreateChildMemStorage( scanner->storage2 );
304 scanner->cinfo_set = cvCreateSet( 0, sizeof( CvSet ), sizeof( _CvContourInfo ),
305 scanner->cinfo_storage );
306 if( scanner->cinfo_storage == 0 || scanner->cinfo_set == 0 )
326 cvFree( &scanner );
328 return scanner;
360 icvContourScanner scanner;
375 &scanner );
380 result = icvFindNextContour( &scanner, &contour/0 );
390 cvEndFindContours( &scanner, &first_contour );
401 icvContourScanner scanner;
418 &scanner );
424 result = icvFindNextContour( scanner, &temp_contour );
431 icvSubstituteContour( scanner, new_contour );
437 cvEndFindContours( &scanner, &first_contour );
448 result = icvFindNextContour( &scanner, &temp_contour );
454 icvSubstituteContour( scanner, 0 );
469 icvEndProcessContour( CvContourScanner scanner )
471 _CvContourInfo *l_cinfo = scanner->l_cinfo;
475 if( scanner->subst_flag )
479 cvSaveMemStoragePos( scanner->storage2, &temp );
481 if( temp.top == scanner->backup_pos2.top &&
482 temp.free_space == scanner->backup_pos2.free_space )
484 cvRestoreMemStoragePos( scanner->storage2, &scanner->backup_pos );
486 scanner->subst_flag = 0;
492 &(scanner->frame) );
494 scanner->l_cinfo = 0;
500 cvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour )
508 if( !scanner )
511 l_cinfo = scanner->l_cinfo;
515 scanner->subst_flag = 1;
835 cvFindNextContour( CvContourScanner scanner )
853 if( !scanner )
855 icvEndProcessContour( scanner );
858 img0 = scanner->img0;
859 img = scanner->img;
860 step = scanner->img_step;
861 x = scanner->pt.x;
862 y = scanner->pt.y;
863 width = scanner->img_size.width;
864 height = scanner->img_size.height;
865 mode = scanner->mode;
866 lnbd = scanner->lnbd;
867 nbd = scanner->nbd;
907 par_info = &(scanner->frame_info);
912 _CvContourInfo *cur = scanner->cinfo_table[lval - 2];
924 if( icvTraceContour( scanner->img0 +
947 par_info = &(scanner->frame_info);
958 cvSaveMemStoragePos( scanner->storage2, &(scanner->backup_pos) );
960 seq = cvCreateSeq( scanner->seq_type1, scanner->header_size1,
961 scanner->elem_size1, scanner->storage1 );
972 l_cinfo = &(scanner->cinfo_temp);
974 cvPoint( origin.x + scanner->offset.x,
975 origin.y + scanner->offset.y),
976 seq, scanner->approx_method1 );
984 cvSetAdd( scanner->cinfo_set, 0, &v.se );
988 cvPoint( origin.x + scanner->offset.x,
989 origin.y + scanner->offset.y),
990 seq, scanner->approx_method1,
994 l_cinfo->rect.x -= scanner->offset.x;
995 l_cinfo->rect.y -= scanner->offset.y;
997 l_cinfo->next = scanner->cinfo_table[nbd - 2];
998 scanner->cinfo_table[nbd - 2] = l_cinfo;
1010 if( scanner->approx_method1 != scanner->approx_method2 )
1013 scanner->header_size2,
1014 scanner->storage2,
1016 scanner->approx_method2 );
1019 cvClearMemStorage( scanner->storage1 );
1027 if( scanner->storage1 == scanner->storage2 )
1029 cvRestoreMemStoragePos( scanner->storage1, &(scanner->backup_pos) );
1033 cvClearMemStorage( scanner->storage1 );
1039 cvSaveMemStoragePos( scanner->storage2, &(scanner->backup_pos2) );
1040 scanner->l_cinfo = l_cinfo;
1041 scanner->pt.x = x + 1;
1042 scanner->pt.y = y;
1043 scanner->lnbd = lnbd;
1044 scanner->img = (schar *) img;
1045 scanner->nbd = nbd;
1087 CvContourScanner scanner;
1096 scanner = *_scanner;
1098 if( scanner )
1100 icvEndProcessContour( scanner );
1102 if( scanner->storage1 != scanner->storage2 )
1103 cvReleaseMemStorage( &(scanner->storage1) );
1105 if( scanner->cinfo_storage )
1106 cvReleaseMemStorage( &(scanner->cinfo_storage) );
1108 first = scanner->frame.v_next;
1515 CvContourScanner scanner = 0;
1537 CV_CALL( scanner = cvStartFindContours( img, storage,
1539 assert( scanner );
1544 contour = cvFindNextContour( scanner );
1548 *firstContour = cvEndFindContours( &scanner );