//チェスボードのパネル数と内部の点 const int ChessX = 5; const int PinChessX = ChessX -1; const int ChessY = 4; const int PinChessY = ChessY -1; ... ... //メモリ確保 CvPoint2D32f *corners = (CvPoint2D32f *) cvAlloc( sizeof (CvPoint2D32f) * (PinChessX*PinChessY) );
//チェスボードのパネル数と内部の点 const int ChessX = 5; const int PinChessX = ChessX -1; const int ChessY = 4; const int PinChessY = ChessY -1; ... ... //チェスボードの内部コーナー(X,Y) CvSize CornerXY = cvSize (PinChessX, PinChessY); //メモリ確保 CvPoint2D32f *corners = (CvPoint2D32f *) cvAlloc( sizeof (CvPoint2D32f) * (PinChessX*PinChessY) ); ... ... int FindNum; //検出した個数を格納 cvFindChessboardCorners(imgA,CornerXY,corners,&FindNum); //第5引数省略
//高精度化 IplImage *gray = cvCreateImage (cvGetSize (imgA), IPL_DEPTH_8U, 1); cvCvtColor (imgA, gray, CV_BGR2GRAY); cvFindCornerSubPix (gray, corners, FindNum, cvSize (3, 3), cvSize (-1, -1), cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); //20回の反復、目標精度:0.03 cvReleaseImage(&gray);