目前我正在实施立体视觉的校准方法。我正在使用 OpenCV 库。
示例文件夹中有一个示例,但我对实现有一些疑问:
这些数组的用途是什么?这些 CvMat 变量是什么?
// ARRAY AND VECTOR STORAGE:
double M1[3][3], M2[3][3], D1[5], D2[5];
double R[3][3], T[3], E[3][3], F[3][3];
CvMat _M1 = cvMat(3, 3, CV_64F, M1 );
CvMat _M2 = cvMat(3, 3, CV_64F, M2 );
CvMat _D1 = cvMat(1, 5, CV_64F, D1 );
CvMat _D2 = cvMat(1, 5, CV_64F, D2 );
CvMat _R = cvMat(3, 3, CV_64F, R );
CvMat _T = cvMat(3, 1, CV_64F, T );
CvMat _E = cvMat(3, 3, CV_64F, E );
CvMat _F = cvMat(3, 3, CV_64F, F );
在其他示例中,我看到以下代码:
//--------Find and Draw chessboard--------------------------------------------------
if((frame++ % 20) == 0)
{
//----------------CAM1-------------------------------------------------------------------------------------------------------
result1 = cvFindChessboardCorners( frame1, board_sz,&temp1[0], &count1,CV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS);
cvCvtColor( frame1, gray_fr1, CV_BGR2GRAY );
if 语句究竟做了什么?为什么是 %20?
先感谢您!
更新:
我对一些实现代码有两个问题:link
-1:在第 18 行声明并在第 25 行的 board_sz 变量中使用的那些 nx 和 ny 变量。这些 nx 和 ny 是棋盘图案中的行和列还是角?(我认为这些是行和列,因为 cvSize 具有宽度和高度参数)。
-2:这些 CvMat 变量有什么用(第 143 - 146 行)?
CvMat _objectPoints = cvMat(1, N, CV_32FC3, &objectPoints[0] );
CvMat _imagePoints1 = cvMat(1, N, CV_32FC2, &points[0][0] );
CvMat _imagePoints2 = cvMat(1, N, CV_32FC2, &points[1][0] );
CvMat _npoints = cvMat(1, npoints.size(), CV_32S, &npoints[0] );