|
楼主 |
发表于 2013-6-6 08:50:38
|
显示全部楼层
【代码】单目摄像机标定程序_分享
[quote="guvcolie":c18wgdb1]我是本帖贴主,我自己写了一个双目立体标定的代码,效果比较好,应用图如下
如果有需要的请留言,如果需要的人不多的话我就不写在帖子上了 楼主好人啊!最近在学习立体视觉,不知道能不能把双目标定的程序发一份学习一下?
QQ邮箱1040383255@qq.com
十分感谢![/quote:c18wgdb1]
其实立体标定的程序很简单,如果调用opencv自带的函数的话只需要在单目标定的基础上加几行代码就可以了:
CvSize imageSize = cvSize (1024,768);
CvMat * R = cvCreateMat (3,3,CV_64FC1); //旋转矩阵
CvMat * T = cvCreateMat (3,1,CV_64FC1); //平移矩阵
CvMat * object_points = (CvMat *) cvLoad ("Object_points.xml"); //以下将单目标定的结果矩阵调入,用作立体标定
CvMat * left_points = (CvMat *) cvLoad ("Left_points.xml");
CvMat * right_points = (CvMat *) cvLoad ("Right_points.xml");
CvMat * counts = (CvMat *) cvLoad ("Counts.xml");
CvMat * left_intrinsic = (CvMat *) cvLoad ("Left_intrinsic.xml");
CvMat * left_distortion = (CvMat *) cvLoad ("Left_distortion.xml");
CvMat * right_intrinsic = (CvMat *) cvLoad ("Right_intrinsic.xml");
CvMat * right_distortion = (CvMat *) cvLoad ("Right_distortion.xml");
cvStereoCalibrate ( object_points, left_points, right_points, counts, //立体标定
left_intrinsic, left_distortion,
right_intrinsic, right_distortion,
imageSize,
R, T, 0, 0,
cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, 1e-5),
CV_CALIB_FIX_ASPECT_RATIO+CV_CALIB_FIX_PRINCIPAL_POINT+CV_CALIB_SAME_FOCAL_LENGTH
);
其中object_points, left_points, right_points, counts,left_intrinsic, left_distortion,
right_intrinsic, right_distortion,都是单目标定程序最后输出的矩阵,将这些矩阵作为参数传入cvStereoCalibrate函数中,就可以计算出两摄像机之间的旋转、平移关系了!
|
|