static int init( int argc, char *argv[] ) { ARGViewport viewport; char *filename = NULL; int xmax, ymax; float xzoom, yzoom; float zoom; int i; for( i = 1; i < argc; i++ ) { if( filename == NULL ) filename = argv[i]; else usage(argv[0] ); } if (!filename || !filename[0]) usage(argv[0]); ARLOG("Read ImageSet.\n"); ar2UtilRemoveExt( filename ); imageSet = ar2ReadImageSet( filename ); if( imageSet == NULL ) { ARLOGe("file open error: %s.iset\n", filename ); exit(0); } ARLOG(" end.\n"); arMalloc(vp, ARGViewportHandle *, imageSet->num); xmax = ymax = 0; for( i = 0; i < imageSet->num; i++ ) { if( imageSet->scale[i]->xsize > xmax ) xmax = imageSet->scale[i]->xsize; if( imageSet->scale[i]->ysize > ymax ) ymax = imageSet->scale[i]->ysize; } xzoom = yzoom = 1.0; while( xmax > winXsize*xzoom ) xzoom += 1.0; while( ymax > winYsize*yzoom ) yzoom += 1.0; if( xzoom > yzoom ) zoom = 1.0/xzoom; else zoom = 1.0/yzoom; winXsize = xmax * zoom; winYsize = ymax * zoom; ARLOG("Size = (%d,%d) Zoom = %f\n", xmax, ymax, zoom); argCreateWindow( winXsize, winYsize ); for( i = 0; i < imageSet->num; i++ ) { viewport.sx = viewport.sy = 0; viewport.xsize = imageSet->scale[i]->xsize * zoom; viewport.ysize = imageSet->scale[i]->ysize * zoom; vp[i] = argCreateViewport( &viewport ); argViewportSetImageSize( vp[i], imageSet->scale[i]->xsize, imageSet->scale[i]->ysize ); argViewportSetDispMethod( vp[i], AR_GL_DISP_METHOD_TEXTURE_MAPPING_FRAME ); //argViewportSetDispMethod( vp[i], AR_GL_DISP_METHOD_GL_DRAW_PIXELS ); argViewportSetDispMode( vp[i], AR_GL_DISP_MODE_FIT_TO_VIEWPORT ); argViewportSetDistortionMode( vp[i], AR_GL_DISTORTION_COMPENSATE_DISABLE ); } reportCurrentDPI(); return 0; }
static void init( int argc, char *argv[] ) { char vconf[256]; ARGViewport viewport; ARUint32 euid0, euid1; double length; int i, j; // Allow user to choose file version for backwards compatibility. ARLOG("A calibrated camera parameter file for ARToolKit will be produced.\n"); ARLOG("The file can be generated to be backwards compatible with previous ARToolKit versions.\n"); ARLOG(" 1: ARToolKit v1.0 and later\n"); ARLOG(" 2: ARToolKit v4.0 and later\n"); ARLOG(" 3: ARToolKit v4.1 and later\n"); printf("Enter the number (1 to %d) of the camera parameter file version: ", AR_DIST_FUNCTION_VERSION_MAX); scanf("%d", &dist_function_version); while (getchar() != '\n'); patt.h_num = H_NUM; patt.v_num = V_NUM; patt.loop_num = 0; if( patt.h_num < 3 || patt.v_num < 3 ) exit(0); printf("Input the distance between each marker dot, in millimeters: "); scanf("%lf", &length); while( getchar()!='\n' ); patt.world_coord = (CALIB_COORD_T *)malloc( sizeof(CALIB_COORD_T)*patt.h_num*patt.v_num ); for( j = 0; j < patt.v_num; j++ ) { for( i = 0; i < patt.h_num; i++ ) { patt.world_coord[j*patt.h_num+i].x_coord = length * i; patt.world_coord[j*patt.h_num+i].y_coord = length * j; } } if( argc == 1 ) { strcpy(vconf, VCONF); } else { strcpy(vconf, argv[1]); for( i = 2; i < argc; i++ ) { strcat(vconf, " "); strcat(vconf, argv[i]); } } if( arVideoOpen(vconf) < 0 ) exit(0); if( arVideoGetSize(&xsize, &ysize) < 0 ) exit(0); if( (pixelFormat=arVideoGetPixelFormat()) < 0 ) exit(0); if( (pixelSize=arVideoGetPixelSize()) < 0 ) exit(0); ARLOG("Camera image size (x,y) = (%d,%d)\n", xsize, ysize); viewport.sx = 0; viewport.sy = 0; viewport.xsize = xsize/SCALE; viewport.ysize = ysize/SCALE; if( (vp=argCreateViewport(&viewport)) == NULL ) exit(0); argViewportSetImageSize( vp, xsize, ysize ); argViewportSetPixFormat( vp, pixelFormat ); argViewportSetDispMethod( vp, AR_GL_DISP_METHOD_GL_DRAW_PIXELS ); argViewportSetDispMode( vp, AR_GL_DISP_MODE_FIT_TO_VIEWPORT ); argViewportSetDistortionMode( vp, AR_GL_DISTORTION_COMPENSATE_DISABLE ); clipImage = (unsigned char *)malloc( xsize*ysize*pixelSize ); if( clipImage == NULL ) exit(0); save_filename[0] = '\0'; if( arVideoGetId(&euid0, &euid1) == 0 ) { sprintf(save_filename, "cpara.%08x%08x", euid0, euid1); } }
static void init(int argc, char *argv[]) { ARGViewport viewport; char *vconf = NULL; int i; int gotTwoPartOption; int screenWidth, screenHeight, screenMargin; chessboardCornerNumX = 0; chessboardCornerNumY = 0; calibImageNum = 0; patternWidth = 0.0f; arMalloc(cwd, char, MAXPATHLEN); if (!getcwd(cwd, MAXPATHLEN)) ARLOGe("Unable to read current working directory.\n"); else ARLOG("Current working directory is '%s'\n", cwd); i = 1; // argv[0] is name of app, so start at 1. while (i < argc) { gotTwoPartOption = FALSE; // Look for two-part options first. if ((i + 1) < argc) { if (strcmp(argv[i], "--vconf") == 0) { i++; vconf = argv[i]; gotTwoPartOption = TRUE; } } if (!gotTwoPartOption) { // Look for single-part options. if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-help") == 0 || strcmp(argv[i], "-h") == 0) { usage(argv[0]); } else if (strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "-version") == 0 || strcmp(argv[i], "-v") == 0) { ARLOG("%s version %s\n", argv[0], AR_HEADER_VERSION_STRING); exit(0); } else if (strncmp(argv[i], "-cornerx=", 9) == 0) { if (sscanf(&(argv[i][9]), "%d", &chessboardCornerNumX) != 1) usage(argv[0]); if (chessboardCornerNumX <= 0) usage(argv[0]); } else if (strncmp(argv[i], "-cornery=", 9) == 0) { if (sscanf(&(argv[i][9]), "%d", &chessboardCornerNumY) != 1) usage(argv[0]); if (chessboardCornerNumY <= 0) usage(argv[0]); } else if (strncmp(argv[i], "-imagenum=", 10) == 0) { if (sscanf(&(argv[i][10]), "%d", &calibImageNum) != 1) usage(argv[0]); if (calibImageNum <= 0) usage(argv[0]); } else if (strncmp(argv[i], "-pattwidth=", 11) == 0) { if (sscanf(&(argv[i][11]), "%f", &patternWidth) != 1) usage(argv[0]); if (patternWidth <= 0) usage(argv[0]); } else { ARLOGe("Error: invalid command line argument '%s'.\n", argv[i]); usage(argv[0]); } } i++; } if (chessboardCornerNumX == 0) chessboardCornerNumX = CHESSBOARD_CORNER_NUM_X; if (chessboardCornerNumY == 0) chessboardCornerNumY = CHESSBOARD_CORNER_NUM_Y; if (calibImageNum == 0) calibImageNum = CALIB_IMAGE_NUM; if (patternWidth == 0.0f) patternWidth = (float)CHESSBOARD_PATTERN_WIDTH; ARLOG("CHESSBOARD_CORNER_NUM_X = %d\n", chessboardCornerNumX); ARLOG("CHESSBOARD_CORNER_NUM_Y = %d\n", chessboardCornerNumY); ARLOG("CHESSBOARD_PATTERN_WIDTH = %f\n", patternWidth); ARLOG("CALIB_IMAGE_NUM = %d\n", calibImageNum); ARLOG("Video parameter: %s\n", vconf); if (arVideoOpen(vconf) < 0) exit(0); if (arVideoGetSize(&xsize, &ysize) < 0) exit(0); ARLOG("Image size (x,y) = (%d,%d)\n", xsize, ysize); if ((pixFormat = arVideoGetPixelFormat()) == AR_PIXEL_FORMAT_INVALID) exit(0); screenWidth = glutGet(GLUT_SCREEN_WIDTH); screenHeight = glutGet(GLUT_SCREEN_HEIGHT); if (screenWidth > 0 && screenHeight > 0) { screenMargin = (int)(MAX(screenWidth, screenHeight) * SCREEN_SIZE_MARGIN); if ((screenWidth - screenMargin) < xsize || (screenHeight - screenMargin) < ysize) { viewport.xsize = screenWidth - screenMargin; viewport.ysize = screenHeight - screenMargin; ARLOG("Scaling window to fit onto %dx%d screen (with %2.0f%% margin).\n", screenWidth, screenHeight, SCREEN_SIZE_MARGIN * 100.0); } else { viewport.xsize = xsize; viewport.ysize = ysize; } } else { viewport.xsize = xsize; viewport.ysize = ysize; } viewport.sx = 0; viewport.sy = 0; if ((vp = argCreateViewport(&viewport)) == NULL) exit(0); argViewportSetImageSize(vp, xsize, ysize); argViewportSetPixFormat(vp, pixFormat); argViewportSetDispMethod(vp, AR_GL_DISP_METHOD_TEXTURE_MAPPING_FRAME); argViewportSetDistortionMode(vp, AR_GL_DISTORTION_COMPENSATE_DISABLE); argViewportSetDispMode(vp, AR_GL_DISP_MODE_FIT_TO_VIEWPORT_KEEP_ASPECT_RATIO); // Set up the grayscale image. arIPI = arImageProcInit(xsize, ysize, pixFormat, 1); // 1 -> always copy, since we need OpenCV to be able to wrap the memory. if (!arIPI) { ARLOGe("Error initialising image processing.\n"); exit(-1); } calibImage = cvCreateImageHeader(cvSize(xsize, ysize), IPL_DEPTH_8U, 1); cvSetData(calibImage, arIPI->image, xsize); // Last parameter is rowBytes. // Allocate space for results. arMalloc(corners, CvPoint2D32f, chessboardCornerNumX * chessboardCornerNumY); arMalloc(cornerSet, CvPoint2D32f, chessboardCornerNumX * chessboardCornerNumY * calibImageNum); }