基于OPENCV的双目标定

马上就要毕业了,进入和视觉完全不同的领域工作。之前发了单目的教程,现在把双目的也发一发吧。

环境:vs2013+opencv2.4.9(多年以前搞得代码了,按道理新版本也可以用的)

进入正题。

首先准备两个USB摄像头,放在相对水平的位置上。

打开摄像头:

	Mat show(1080/2,1920,CV_8UC3);
	VideoCapture cap_left(0);
	if (!cap_left.isOpened()){ cout << "left unopen"; return -1; }
	VideoCapture cap_right(1);
	if (!cap_right.isOpened()){ cout << "right unopen"; return -1; }
	cap_left.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
	cap_left.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
	cap_right.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
	cap_right.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
	char key;
	namedWindow("frame", 0); 

注意参数0,1是根据摄像头的左右来设置的,如果打开反了的话,对换一下,不然后面标定出来有问题。另外这里由于我用的相机是1080p的,所以对分辨率进行了设置,其实不设置也可以用的。

下一步,拍片:

int i = 0;
void onMouse(int event, int x, int y, int flags, void* userdata)
{
	Mat temp0, temp1;
	if (event == 1)
	{
		Left.copyTo(temp0);
		Right.copyTo(temp1);
		images[0].push_back(temp0);
		images[1].push_back(temp1);
		imwrite("whole"+to_string(i++) + ".jpg", frame);
		imwrite("left" + to_string(i) + ".jpg", temp0);
		imwrite("right" + to_string(i) + ".jpg", temp1);

	}

}
 
 
for (;i<20;
	{
		cap_left.grab();
		cap_right.grab();
		cap_left.retrieve(Left);
		cap_right.retrieve(Right);
		Left.copyTo(frame(Rect(0, 0, 1920, 1080)));
		Right.copyTo(frame(Rect(1920, 0, 1920, 1080)));
		//Left.copyTo(frame(Rect(0, 0, 640, 480)));
		//Right.copyTo(frame(Rect(640, 0, 640, 480)));
		resize(frame,show,Size(1920 /2, 1080/2/2 ));
		setMouseCallback("frame", onMouse);
		key = waitKey(20);
		if (key == ' ')return 0;
		imshow("frame", show);
	}

拍了20张图,注意这里是设置了鼠标点击实践,点一次,拍一次,然后把图片存到本地,同时有显示,显示大概如下:


图上将左右视图放到了一个窗口里面显示,便于拍照,但是鼠标点击事件中是分别保存了的,便于后续标定。

拍完片之后,分别对左右摄像头进行单目标定,方法和前面文章中提到的一样。

vector<vector<Point3f> > calcBoardCornerPositions(int gridW, int gridH, float squareSize, int imagesCount)
{
	vector<vector<Point3f> > ObjectPoints(imagesCount);
	for (int k = 0; k <imagesCount; k++) {
		ObjectPoints[k] = vector<Point3f>(0);
		for (int i = 0; i < gridH; i++)
			for (int j = 0; j < gridW; j++)
				ObjectPoints[k].push_back(Point3f(float(j*squareSize), float(i*squareSize), 0));
	}
	//    objectPoints.resize(imagesCount,objectPoints[0]);
	//    cout<<objectPoints.size()<<" "<<objectPoints[0].size()<<endl;
	return ObjectPoints;
}


vector<vector<Point2f> > FindCorners(vector<Mat> images,int LR)
{

	vector<vector<Point2f> > ImagePoints;
	for (int i = 0; i <20; i++)
	{
		vector<Point2f> corners;
		bool found = findChessboardCorners(images[i], grids, corners, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK);

		if (found) 
		{
			cout << i << endl;
			detected_img[LR].push_back(i);
			Mat gray;
			cvtColor(images[i], gray, CV_BGR2GRAY);
			cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),
				TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));//0.1为精度
			ImagePoints.push_back(corners);
			if (SHOW) 
			{
				drawChessboardCorners(images[i], grids, Mat(corners), found);
				imshow("chessboard" + to_string(i), images[i]); 
				if(LR=LEFT)
					imwrite("leftboard" + to_string(i) + ".jpg", images[i]);
				else
					imwrite("rightboard" + to_string(i) + ".jpg", images[i]);
				waitKey(20);
			}
		}
	}
	cv::destroyAllWindows();
	return ImagePoints;
}
void Calibrate( Size imageSize, int LR)
{

	FileStorage fs;
	vector<Mat> rvecs, tvecs; Mat  cameraMatrix; Mat distCoeffs; Mat Output;
	double x=calibrateCamera(objectPoints, imagePoints[LR], imageSize, cameraMatrix, distCoeffs, rvecs, tvecs);
	if (!x)
	{
		cout << LR << endl << "mistake";
		return;
	}
	if(LR==LEFT)
		fs.open("left.xml", FileStorage::WRITE);
	if (LR==RIGHT)
		fs.open("right.xml", FileStorage::WRITE);
	fs << "imageSize" << imageSize;
	fs << "cameraMatrix" << cameraMatrix;
	fs << "distCoeffs" << distCoeffs;
	fs << "rvecs" << rvecs;
	fs << "tvecs" << tvecs;
    fs.release();

}
void Solve(int LR)
{
	if (LR != LEFT && LR != RIGHT)return;
		imagePoints[LR]=FindCorners(images[LR],LR);
	objectPoints = calcBoardCornerPositions(grids.width, grids.height, Square, imagePoints[0].size());
	Calibrate(Left.size(), LR);
}
	Solve(LEFT);
	cout << "left done" << endl;
	Solve(RIGHT);
	cout << "right done" << endl;

这里步骤和之前单目标定的一致,只是左右重复了两次。标定完成之后将参数存入到xml文件里面。

下面就涉及到双目标定了。

注意标定之前要检验一下,左右视图的标定结果是否能够对应,否则可能某一帧的左视图标定了,但右视图却没有,就会造成立体标定的失败。这里粗略的检验了一下左右成功标定的数量是否相同。

int Check(void)
{
	if (detected_img[0].size() != detected_img[1].size())
	{
		return 0;
	}
	for (int j = 0; j < (int)detected_img[0].size(); j++)
	{
		if (detected_img[0][j] != detected_img[1][j])
		{
			return 0;
		}
	}
	return 1;
}
	if (!Check())
	{
		cout << "different images detected" << endl; 
		return 0;
	}

接下来就可以进行立体标定了。


double DoubleCalibrate(void)
{
	Size imageSize;
	Mat  cameraMatrix0, cameraMatrix1;
	Mat  distCoeffs0, distCoeffs1;
	Mat R, T, E, F;
	Mat R0, R1, P0, P1, Q;
	Mat mx0, my0, mx1, my1;
	Rect rect0, rect1;
	FileStorage left("left.xml", FileStorage::READ);
	FileStorage right("right.xml", FileStorage::READ);
	if (!left.isOpened() || !right.isOpened())
	{
		cout << "file unopen" << endl;
		return 0;
	}
	left["imageSize"] >> imageSize;
	left["cameraMatrix"] >> cameraMatrix0;
	right["cameraMatrix"] >> cameraMatrix1;
	left["distCoeffs"] >> distCoeffs0;
	right["distCoeffs"] >> distCoeffs1;
	left.release();
	right.release();
	stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1], cameraMatrix0, distCoeffs0, 
		cameraMatrix1, distCoeffs1, imageSize,R,T,E,F);
	stereoRectify(cameraMatrix0, distCoeffs0, cameraMatrix1, distCoeffs1, imageSize, 
		R, T, R0, R1, P0, P1, Q, 1024,-1,Size(),&rect0, &rect1);
	//Q.at<double>(3, 2) = -Q.at<double>(3, 2);
	initUndistortRectifyMap(cameraMatrix0, distCoeffs0, R0, P0, imageSize, CV_16SC2, mx0, my0);
	initUndistortRectifyMap(cameraMatrix1, distCoeffs1, R1, P1, imageSize, CV_16SC2, mx1, my1);
	FileStorage fs("stero.xml", cv::FileStorage::WRITE);
	fs << "R" << R;
	fs << "T" << T;
	fs << "E" << E;
	fs << "F" << F;
	fs << "Q" << Q;
	fs << "P0" << P0;
	fs << "P1" << P1;
	fs << "mx0" << mx0;
	fs << "my0" << my0;
	fs << "mx1" << mx1;
	fs << "my1" << my1;
	fs << "rect0" << rect0;
	fs << "rect1" << rect1;
	fs.release();
	return 1;
}
	if (!DoubleCalibrate())
	{
		cout << "SteroClibrate Fail" << endl;
		return 0;
	}

这里首先读出左右相机的标定参数,然后调用stereoCalibrate函数进行立体标定,得到R,T,E,F四个矩阵。由于图像可能存在变形,所以又进行了remap标定,得到相应结果,并保存在xml文件中。

好了,标定完成,有了这些东西就可以进行双目重建了。

这里展示一下标定结果。

left.xml:

<?xml version="1.0"?>
<opencv_storage>
<imageSize>
  1920 1080</imageSize>
<cameraMatrix type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    1.0164957645007307e+03 0. 9.3346111794519220e+02 0.
    1.0134501106508859e+03 4.0671998960515646e+02 0. 0. 1.</data></cameraMatrix>
<distCoeffs type_id="opencv-matrix">
  <rows>1</rows>
  <cols>5</cols>
  <dt>d</dt>
  <data>
    -4.4314096850114915e-01 2.8720515910877314e-01
    -2.6842719303891180e-04 9.2607556371746662e-03
    -1.4792860023290322e-01</data></distCoeffs>
<rvecs>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      8.7386545954355105e-02 -3.3191390551199390e-01
      3.0984222941648869e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -5.3251973007253144e-02 -3.2221200331804534e-01
      3.0604077904065679e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.7437381507641290e-02 1.6606946942689688e-01
      -3.0427239917222750e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -8.6365474614945193e-03 -2.6289892933664238e-01
      2.9707589659581091e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      7.7964565895812216e-02 2.5697132190634059e-01
      -2.9980775922985208e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -1.5543847342581145e-02 -3.2409925174075788e-01
      3.0811633005629706e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.1538827403612335e-01 -3.3253160040654733e-01
      3.1086141568260452e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -8.6917358739678527e-02 4.0557394342175768e-01
      -3.0800361262461102e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.2839561287840262e-01 -4.3224267096500413e-01
      3.0728513993269764e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.1348940550820542e-01 -4.6341981382680836e-01
      3.0017794756279410e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.6198593156614361e-02 4.1557853726315652e-01
      -3.0504233070382818e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -3.1616133967838750e-01 -3.5540228527342443e-01
      2.9398208403114650e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -5.3407390556517265e-01 5.5099678651044148e-01
      -2.9563202940700473e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.6671482169714164e-01 -1.3179882175846225e-01
      3.0747224749482549e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.2754220246638888e-02 -2.9408363808727922e-01
      3.1162760216685497e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.6029953866943128e-01 3.1009300897746633e-01
      -3.0845008346318510e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -2.2255834035587768e-01 3.8808915241854003e-01
      -3.0939007511947825e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.5678896178004745e-01 -4.4263271786085717e-01
      3.1105602647895423e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -3.1300475117531229e-01 2.3428842857690937e-01
      -3.0980168681656126e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.2909813575014116e-02 -4.1519996849162066e-01
      3.1307035625945150e+00</data></_></rvecs>
<tvecs>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.3207594310691084e+03 -1.1004765204268884e+02
      7.1707391749900435e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.2573177142974059e+03 5.4787112786581190e+02
      6.5610506392593861e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      4.1680214243483379e+03 8.0735683370191464e+02
      6.8447271220427165e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.1962650254720520e+03 6.3076296255846455e+02
      6.5870689636269472e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.7532983553523436e+03 1.1082630428850410e+02
      6.6286860474912364e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.8346380492225435e+03 5.8900159695596290e+02
      7.0383210051735114e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.8107286796355593e+03 5.5785652975574465e+02
      6.8062134952896304e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.3285212209348874e+03 2.8034012858950899e+02
      6.4237676797502254e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.0836706278706051e+03 1.7625667374171577e+01
      7.4049315057959848e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.4450084773516237e+03 5.2542109711883597e+02
      6.6812677414244699e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.6417184724693452e+03 7.4288405272741545e+02
      6.8445207315802027e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.6505349062480964e+03 6.6326740949902751e+02
      6.6184685789758023e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.1904478957280417e+03 6.6344811729820992e+02
      6.3740425254618931e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      2.9005068093295436e+03 2.8759730205902258e+02
      6.9366604812855967e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.0554800165944621e+03 7.7468233883346170e+02
      5.8645621181964898e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.7606765510593846e+03 7.5062949057036292e+02
      5.5999963636939938e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.3656859043167615e+03 5.4595395827807840e+02
      5.1627672055706398e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.5300902159777506e+03 1.7095921170357650e+02
      6.9937374785061938e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.1793869751373059e+03 -4.2331810371034095e+02
      7.2131106429504689e+03</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.9632447007638561e+03 2.2434309000452762e+02
      6.8283192813688393e+03</data></_></tvecs>
</opencv_storage>

right.xml:

<?xml version="1.0"?>
<opencv_storage>
<imageSize>
  1920 1080</imageSize>
<cameraMatrix type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    9.0895479287144753e+03 0. 8.7975187048128487e+02 0.
    8.4613062209258351e+03 4.9133934804432761e+02 0. 0. 1.</data></cameraMatrix>
<distCoeffs type_id="opencv-matrix">
  <rows>1</rows>
  <cols>5</cols>
  <dt>d</dt>
  <data>
    -3.0939138021111351e+01 1.2996065533171211e+03
    -1.1683549656998268e-01 -2.2391303801235590e-01
    9.8882371776156592e+00</data></distCoeffs>
<rvecs>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.7059673349672633e-01 -8.7972251425540177e-03
      -3.1609309047294052e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      5.6814794362125010e-01 7.5945201546326335e-02
      2.9551042609292084e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.4947957787799637e-01 -5.6825589856291806e-03
      -3.0413504154677984e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      6.2614244318344525e-01 1.0523204359462526e-01
      2.8463427927826825e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.0233460755779378e-01 -1.8365378596549114e-02
      -3.0115001704569204e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.4269569781437863e-01 -6.5020974380793642e-02
      -3.1909775575327521e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -7.1877192734689932e-01 1.3458041342922326e-02
      -3.1433559667047382e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.4015978145242591e-01 4.7000049705981893e-02
      -3.1092416935684031e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.7468958123041467e-01 7.0567728340463931e-02
      -3.1781206066480956e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.9365257401953839e-01 1.0829283850456557e-01
      -3.2534576766341448e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      5.6963573394397893e-01 1.9878100577422786e-04
      3.0804027749844298e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      4.6962363618006070e-01 2.6620226742168829e-01
      2.8478243702480066e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -9.3466779669132882e-01 3.3847788128447037e-01
      -2.9735958361333896e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      7.2075095592131666e-01 8.5597179573879426e-02
      2.9355991292324854e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.8928182437998009e-01 -6.0626997423351904e-02
      -3.1490790884028796e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      6.0715204980736193e-01 9.6530235259646560e-02
      3.0533297387815437e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -7.5979255771972209e-01 6.7137897458541068e-02
      -3.1107076972112320e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.5013617210590657e-01 8.7732681765243584e-02
      -3.1403423930913772e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      7.8467071270532618e-01 2.5397671098314818e-02
      2.9874284647463374e+00</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      5.7654160548418143e-01 -1.0979255651696872e-02
      3.0447494178116790e+00</data></_></rvecs>
<tvecs>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -4.4499996782236127e+02 6.3652277773268088e+02
      5.2385948219706537e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -4.4972444027816505e+02 1.2135493955216230e+03
      4.6502410646274089e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.8194145084094055e+02 1.4478176731761282e+03
      4.8175723110503677e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -1.3981024555370984e+03 1.3591247921967586e+03
      4.6419433160910005e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -9.3139862855452986e+02 8.2425472633397828e+02
      4.7696471537668629e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -8.4742578441849309e+02 1.3370100453787302e+03
      4.9900466622664855e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -8.7390259571376657e+02 1.2888877960811772e+03
      4.8989368579174101e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -4.0267177482038886e+02 9.4425092332451368e+02
      4.6821562388976643e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.5869297912695356e+02 8.1187118467651032e+02
      5.4301027498096257e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -1.2206978868163444e+03 1.2832416838609263e+03
      4.8690382942359196e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -9.2469835467946595e+01 1.4259756933495280e+03
      4.8766576408896559e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -9.2900871178972147e+02 1.3241638315280679e+03
      4.4750396896364546e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -5.4467193871726101e+02 1.3540266883866000e+03
      4.7838668643138495e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -8.1412921085394953e+02 1.0300074188382123e+03
      5.0411576931845913e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -6.2356950125777144e+02 1.3649441884965183e+03
      4.1346429597530492e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      3.2582226659015824e+01 1.2553227002774368e+03
      3.9002082815838025e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -3.6850752105965421e+02 1.0643559053403717e+03
      3.7989532327864130e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -2.3905292717014842e+02 8.9263243796892596e+02
      5.1424323102140828e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      -5.9874424141965665e+02 3.3435965757638741e+02
      5.4160161402308571e+04</data></_>
  <_ type_id="opencv-matrix">
    <rows>3</rows>
    <cols>1</cols>
    <dt>d</dt>
    <data>
      1.7929303980785124e+02 8.9954433344485449e+02
      4.9646588310879699e+04</data></_></tvecs>
</opencv_storage>

stereo.xml:

<?xml version="1.0"?>
<opencv_storage>
<R type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    9.9952435841996701e-001 1.8392195107800713e-002
    -2.4754476045147390e-002 -1.7972033958766488e-002
    9.9969242276455550e-001 1.7089934538148603e-002
    2.5061183542245735e-002 -1.6636917570567324e-002
    9.9954747263609844e-001</data></R>
<T type_id="opencv-matrix">
  <rows>3</rows>
  <cols>1</cols>
  <dt>d</dt>
  <data>
    -8.6815095014208464e+002 3.9987806893813147e+000
    -7.7872396714738571e+001</data></T>
<E type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    -1.2993111814060445e+000 7.7781917553527592e+001
    5.3278052938807487e+000 -5.6078467061038410e+001
    -1.5875600110213096e+001 8.6968577846020139e+002
    1.1605559654272925e+001 -8.6795747302752386e+002
    -1.4737655186374651e+001</data></E>
<F type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    3.2333610276313647e-008 -1.9332528567961244e-006
    7.0495054370849736e-004 1.3926516405638931e-006
    3.9377260991550783e-007 -4.6377833806818022e-002
    -1.3216614272343714e-003 4.6519037777532961e-002
    9.9999999999999989e-001</data></F>
<Q type_id="opencv-matrix">
  <rows>4</rows>
  <cols>4</cols>
  <dt>d</dt>
  <data>
    1. 0. 0. -7.3545488166809082e+002 0. 1. 0. -5.2548697304725647e+002
    0. 0. 0. 1.8439871056772704e+003 0. 0. 1.1472551695325967e-003 0.</data></Q>
<P0 type_id="opencv-matrix">
  <rows>3</rows>
  <cols>4</cols>
  <dt>d</dt>
  <data>
    1.8439871056772704e+003 0. 7.3545488166809082e+002 0. 0.
    1.8439871056772704e+003 5.2548697304725647e+002 0. 0. 0. 1. 0.</data></P0>
<P1 type_id="opencv-matrix">
  <rows>3</rows>
  <cols>4</cols>
  <dt>d</dt>
  <data>
    1.8439871056772704e+003 0. 7.3545488166809082e+002
    -1.6073033747396658e+006 0. 1.8439871056772704e+003
    5.2548697304725647e+002 0. 0. 0. 1. 0.</data></P1>
</opencv_storage>

完整的标定代码:

https://download.csdn.net/download/calch/10517328




猜你喜欢

转载自blog.csdn.net/CALch/article/details/80903312