看了许多标定的博文,为了以后的使用将标定步骤整理下来,整体分为先分别标定左右相机在立体标定:
这里使用的标定图片是网上找的,双目标定时待标定图片是双目相机同时拍摄得到的,拍摄程序如下:
#include "stdafx.h"
#include
#include
using namespace std;
char* name_l = (char*)malloc(sizeof(char)*200);
char* name_r = (char*)malloc(sizeof(char)*200);
int main()
{
int i=0;
IplImage *img0 , *img1;
cvNamedWindow("camera_left");
cvNamedWindow("camera_right");
CvCapture* cap_left= cvCreateCameraCapture(2); //这里我的摄像头ID是2,1,也有可能是1,0
CvCapture* cap_right= cvCreateCameraCapture(1);
while(1)
{
img0 = cvQueryFrame(cap_left);
img1 = cvQueryFrame(cap_right);
if( !img0 || !img1)
{
cout << "camera0 error" << endl;
break;
}
cvShowImage("camera_left", img0);
cvShowImage("camera_right", img1);
char c = cvWaitKey(33);
if(c == 27)
break;
if(c == 32)
{
i++;
sprintf(name_l, "leftPic%d.jpg", i);
sprintf(name_r, "rightPic%d.jpg", i);
cvSaveImage(name_l, img0);
cvSaveImage(name_r, img1);
}
}
cvReleaseCapture(&cap_left);
cvReleaseCapture(&cap_right);
cvDestroyWindow("camera_left");
cvDestroyWindow("camera_right");
return 0;
}
将下载好的标定工具箱插件放到MATLAB目录下,这里本人是放置toolboox这个文件夹下,然后打开MATLAB点击File->Set Path->Add Floder添加插件目录,在save一下
将当前文件夹设置成待标定图片的文件夹,我这里是在桌面新建一个文件夹放置图片,所以Current Folder设置如下
MATLAB命令行窗口输入calib_gui,弹出工具框
选择第一个Standard,弹出如下界面Camera Calibration Toolbox(以下简称标定界面)
现在开始左摄像头标定,选择第一个Images names后,MATLAB命令行窗口会提示你输入图片的basename以及各格式,这里图片保存的文件名如第二张图左侧所示为left01,left02,所以提示的basename行写left,按Enter键提示输入图片格式,这里为jpg,在按回车键读入做摄像头的棋盘图这里读入的图片就不显示了。
然后点击标定界面上的Extract grid corners,MATLAB命令界面显示然后一路回车键下去最后如下
3
3
d
534.02373 0. 341.01149
0. 533.86709 233.26555
0. 0. 1.
Distortion_Camera_Left.xml:
5
1
d
-0.28668 0.10398 0.00171 -0.00063 0.00000
Intrinsics_Camera_Right.xml:
3
3
d
537.82796 0. 321.73805
0. 537.87268 249.47070
0. 0. 1.
Distortion_Camera_Right.xml:
5
1
d
-0.29416 0.13839 -0.00009 0.00061 0.00000
RotRodrigues.xml:
3
1
d
0.00918 0.01162 -0.00369
Translation.xml:
3
1
d
-83.09797 0.95964 1.09394
将上述语句复制到txt中,然后直接修改后缀为xml即可,以上数值都是MATLAB立体标定结果内容,自己复制后只需将数字对应改成自己的标定结果就行。