将matlab立体标定参数的mat格式写成xml格式

来源:互联网 发布:淘宝睡衣退款率 编辑:程序博客网 时间:2024/05/22 01:40

#include "stdafx.h"

#include <cv.h>  

#include <highgui.h> 

#include<opencv2\core\mat.hpp>

#include<iostream>


using namespace std;
using namespace cv;

int _tmain(int argc_TCHARargv[])


{

//定义内外参矩阵

CvMat intrinsic_left,

intrinsic_right,

distortion_left,

distortion_right,

R, T;

 

//数据初始化

double intrinsic_left_arr[] = { 1361.16034, 0, 720.7713,

0, 1362.22497, 517.90402,

0, 0, 1 };

double intrinsic_right_arr[] = { 1381.34556, 0, 673.85079,

0, 1371.99578, 514.15627,

0, 0, 1 };

double distortion_left_arr[] = { 0.12442, -0.11545,

-0.01275, 0.01142, 0 };

double distortion_right_arr[] = { -0.26875, 0.45912,

0.01033, -0.00427, 0 };

double T_arr[] = { -1243.55970, -48.67515, 27.08584 };

double R_arr[] = { 0.06846, -0.01520, 0.01620 };

 

cvInitMatHeader(&intrinsic_left, 3, 3, CV_64F, intrinsic_left_arr);

cvInitMatHeader(&intrinsic_right, 3, 3, CV_64F, intrinsic_right_arr);

cvInitMatHeader(&distortion_left, 5, 1, CV_64F, distortion_left_arr);

cvInitMatHeader(&distortion_right, 5, 1, CV_64F, distortion_right_arr);

cvInitMatHeader(&R, 3, 1, CV_64F, R_arr);

cvInitMatHeader(&T, 3, 1, CV_64F, T_arr);

 

//保存成xml

cvSave("intrinsic_left.xml", &intrinsic_left);

cvSave("intrinsic_right.xml", &intrinsic_right);

cvSave("distortion_left.xml", &distortion_left);

cvSave("distortion_right.xml", &distortion_right);

cvSave("R.xml", &R);

cvSave("T.xml", &T);

 

//cvload的xml

CvMat *_M1 = (CvMat*)cvLoad("intrinsic_left.xml");

CvMat *_M2 = (CvMat*)cvLoad("intrinsic_right.xml");

CvMat *_D1 = (CvMat*)cvLoad("distortion_left.xml");

CvMat *_D2 = (CvMat*)cvLoad("distortion_right.xml");

CvMat *_R= (CvMat*)cvLoad("R.xml");

//CvMat *_r = (CvMat*)cvLoad("R.xml");

//CvMat *_R = cvCreateMat(3, 3, CV_64F);

CvMat *_T = (CvMat*)cvLoad("T.xml");

// 旋转矩阵罗德里格斯变换

//cvRodrigues2(_r, _R, NULL);


    cout<<"ok!!";

    return 0;

}

运行成功后,可在运行文件中找到这几个xml,如果要将R矩阵由3*1转换成3*3使用则需使用罗德里格斯变换

0 0
原创粉丝点击