int arSavePatt( ARUint8 *image, ARMarkerInfo *marker_info, char *filename ) { FILE *fp; ARUint8 ext_pat[4][AR_PATT_SIZE_Y][AR_PATT_SIZE_X][3]; int vertex[4]; int i, j, k, x, y; // Match supplied info against previously recognised marker. for( i = 0; i < wmarker_num; i++ ) { if( marker_info->area == marker_info2[i].area && marker_info->pos[0] == marker_info2[i].pos[0] && marker_info->pos[1] == marker_info2[i].pos[1] ) break; } if( i == wmarker_num ) return -1; for( j = 0; j < 4; j++ ) { for( k = 0; k < 4; k++ ) { vertex[k] = marker_info2[i].vertex[(k+j+2)%4]; } arGetPatt( image, marker_info2[i].x_coord, marker_info2[i].y_coord, vertex, ext_pat[j] ); } fp = fopen( filename, "w" ); if( fp == NULL ) return -1; // Write out in order AR_PATT_SIZE_X columns x AR_PATT_SIZE_Y rows x 3 colours x 4 orientations. for( i = 0; i < 4; i++ ) { for( j = 0; j < 3; j++ ) { for( y = 0; y < AR_PATT_SIZE_Y; y++ ) { for( x = 0; x < AR_PATT_SIZE_X; x++ ) { fprintf( fp, "%4d", ext_pat[i][y][x][j] ); } fprintf(fp, "\n"); } } fprintf(fp, "\n"); } fclose( fp ); return 0; }
int arSavePatt( ARUint8 *image, ARMarkerInfo *marker_info, char *filename ) { FILE *fp; ARUint8 ext_pat[4][AR_PATT_SIZE_Y][AR_PATT_SIZE_X][3]; int vertex[4]; int i, j, k, x, y; for( i = 0; i < wmarker_num; i++ ) { if( marker_info->area == marker_info2[i].area && marker_info->pos[0] == marker_info2[i].pos[0] && marker_info->pos[1] == marker_info2[i].pos[1] ) break; } if( i == wmarker_num ) return -1; for( j = 0; j < 4; j++ ) { for( k = 0; k < 4; k++ ) { vertex[k] = marker_info2[i].vertex[(k+j+2)%4]; } arGetPatt( image, marker_info2[i].x_coord, marker_info2[i].y_coord, vertex, ext_pat[j] ); } fp = fopen( filename, "w" ); if( fp == NULL ) return -1; for( i = 0; i < 4; i++ ) { for( j = 0; j < 3; j++ ) { for( y = 0; y < AR_PATT_SIZE_Y; y++ ) { for( x = 0; x < AR_PATT_SIZE_X; x++ ) { fprintf( fp, "%4d", ext_pat[i][y][x][j] ); } fprintf(fp, "\n"); } } fprintf(fp, "\n"); } fclose( fp ); return 0; }
int arGetCode( ARUint8 *image, int *x_coord, int *y_coord, int *vertex, int *code, int *dir, double *cf ) { #if DEBUG static int count = 0; static double a1 = 0.0; static double a2 = 0.0; double b1, b2, b3; #endif ARUint8 ext_pat[AR_PATT_SIZE_Y][AR_PATT_SIZE_X][3]; #if DEBUG b1 = arUtilTimer(); #endif arGetPatt(image, x_coord, y_coord, vertex, ext_pat); #if DEBUG b2 = arUtilTimer(); #endif pattern_match((ARUint8 *)ext_pat, code, dir, cf); #if DEBUG b3 = arUtilTimer(); #endif #if DEBUG a1 += (b2 - b1); a2 += (b3 - b2); count++; if( count == 60 ) { printf("%10.5f[msec], %10.5f[msec]\n", a1*1000.0/60.0, a2*1000.0/60.0); count = 0; a1 = a2 = 0.0; } #endif return(0); }