我正在學習如何使用openCV來校準攝像頭。 我有一些關於如何使用C代碼,而不是在C++中使用cvcalibrateCamera2函數的問題)cvcalibrateCamera2 in C
問題是,找到棋盤角後,我想導出內在和失真矩陣。 有我的代碼:
IplImage *SrcImage, *GrayImage, *NewImage;
SrcImage = cvLoadImage(argv[1]); // RGB
GrayImage = cvLoadImage(argv[1],0);
int corner_row=6; //interior number of row corners
int corner_col=8; //interior number of column corners
int corner_n=corner_row*corner_col;
CvSize pattern_size=cvSize(corner_row,corner_col);
CvPoint2D32f* corners = new CvPoint2D32f[corner_n];
int corner_count;
int found=cvFindChessboardCorners(
GrayImage,
pattern_size,
corners,
&corner_count,
CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS);
cvDrawChessboardCorners(
SrcImage,
pattern_size,
corners,
corner_count,
found);
CvMat *object_points = cvCreateMat(corner_n, 3, CV_32FC1);
CvMat *image_points = cvCreateMat(corner_n, 2, CV_32FC1);
CvMat *point_counts = cvCreateMat(1, 1, CV_32SC1);
CvMat *distortion = cvCreateMat(5,1,CV_32FC1);
CvMat *cameraMatrix = cvCreateMat(3,3,CV_32FC1);
cvSet(point_counts,cvScalar(corner_n));
CV_MAT_ELEM(*cameraMatrix, float, 0, 0) = 1.0;
CV_MAT_ELEM(*cameraMatrix, float, 1, 1) = 1.0;
cvCalibrateCamera2(object_points,image_points,point_counts,pattern_size,
cameraMatrix,distortion,NULL,NULL,0);
當我運行它,它將使象這樣的錯誤
For non-planar calibration rigs the initial intrinsic matrix must be specified
如果我更換cvcalibrateCamera2的第9個參數0由CV_CALIB_USE_INTRINSIC_GUESS,它將使
One of arguments' values is out of range (The intrinsic matrix must have [fx 0 cx; 0 fy cy; 0 0 1] shape)
我真的不知道這件事,互聯網上的所有材料都是使用C++,python或者通過相機連續拍攝照片。這樣,我不知道如何適應我的代碼。
在此先感謝。