cornersもobjectsと同じようにCvMatに変換する。
IplImage* img[NUM_OF_IMAGES]; CvPoint2D32f _corners[TOTAL_CORNER]; CvMat corners; (画像読み込み) for(int i=0;i<NUM_OF_IMAGES;i++){ cvFindChessboardCorners(img[i],pattern_size,&_corners[i*CHESS_SIZE] ,&corner_count,CV_CALIB_CB_ADAPTIVE_THRESH); } cvInitMatHeader(&corners, TOTAL_CORNER, 1, CV_32FC2, _corners, CV_AUTOSTEP);
point_countsも同様。found=1の画像だけを使うので上のループにでも混ぜ込んでおくと楽。
CvMat point_counts; for(int i=0;i<NUM_OF_IMAGES;i++){ _point_counts[i] = CHESS_SIZE; } cvInitMatHeader(&point_counts, NUM_OF_IMAGES, 1, CV_32SC1, _point_counts, CV_AUTOSTEP);
戻り値も領域の確保が必要。
intrinsic = cvCreateMat(3, 3, CV_32FC1); distortion = cvCreateMat(1, 4, CV_32FC1);
で、やっと引数が出揃ったところで
cvCalibrateCamera2(objects,corners,&point_counts,cvSize(img->width,img->height),intrinsic,distortion,NULL,NULL,0);
でintrinsicとdistortionが求まる。