马上就要毕业了,进入和视觉完全不同的领域工作。之前发了单目的教程,现在把双目的也发一发吧。
环境: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