IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> MATLAB生成的双目相机标定结果mat文件转成opencv可读的XML文件。 -> 正文阅读

[人工智能]MATLAB生成的双目相机标定结果mat文件转成opencv可读的XML文件。

参考:(17条消息) Robomaster: 将Matlab生成的相机标定.XML应用于C++ opencv(记录一下)_只抓猪打。的博客-CSDN博客

function writeXML(file)

%将第五步生成的代码完整粘贴到此处

%writeXML(file)
%功能:将相机校正的参数保存为xml文件
%输入:
%cameraParams:相机校正数据结构
%file:xml文件名
%说明在xml文件是由一层层的节点组成的。
%首先创建父节点 fatherNode,
%然后创建子节点 childNode=docNode.createElement(childNodeName),
%再将子节点添加到父节点 fatherNode.appendChild(childNode)
docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); %创建xml文件对象
docRootNode = docNode.getDocumentElement; %获取根节点
%定义相机参数
IntrinsicMatrixL = ( stereoParams.CameraParameters1. IntrinsicMatrix)'; %相机内参矩阵
RadialDistortionL = stereoParams. CameraParameters1.RadialDistortion; %相机径向畸变参数向量1*3
TangentialDistortionL =stereoParams. CameraParameters1.TangentialDistortion; %相机切向畸变向量1*2
DistortionL = [RadialDistortionL(1:2),TangentialDistortionL,RadialDistortionL(3)]; %构成opencv中的畸变系数向量[k1,k2,p1,p2,k3]

IntrinsicMatrixR = ( stereoParams.CameraParameters2. IntrinsicMatrix)'; %相机内参矩阵
RadialDistortionR = stereoParams. CameraParameters2.RadialDistortion; %相机径向畸变参数向量1*3
TangentialDistortionR =stereoParams. CameraParameters2.TangentialDistortion; %相机切向畸变向量1*2
DistortionR = [RadialDistortionR(1:2),TangentialDistortionR,RadialDistortionR(3)]; %构成opencv中的畸变系数向量[k1,k2,p1,p2,k3]

r=(stereoParams.RotationOfCamera2)';
t=stereoParams.TranslationOfCamera2;

%左相机内参矩阵
cameraL_matrix = docNode.createElement('cameraL-matrix'); %创建mat节点
cameraL_matrix.setAttribute('type_id','opencv-matrix'); %设置mat节点属性
rows = docNode.createElement('rows'); %创建行节点
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %创建文本节点,并作为行的子节点
cameraL_matrix.appendChild(rows); %将行节点作为mat子节点

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
cameraL_matrix.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
cameraL_matrix.appendChild(dt);

data = docNode.createElement('data');
for i=1:3
    for j=1:3
        data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrixL(i,j))));
    end
    data.appendChild(docNode.createTextNode(sprintf('\n')));
end
cameraL_matrix.appendChild(data);
docRootNode.appendChild(cameraL_matrix);

%左相机畸变参数
distortionL = docNode.createElement('distortionL');
distortionL.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',5)));
distortionL.appendChild(rows);

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',1)));
distortionL.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
distortionL.appendChild(dt);
data = docNode.createElement('data');
for i=1:5
      data.appendChild(docNode.createTextNode(sprintf('%.16f ',DistortionL(i))));
end
distortionL.appendChild(data);
docRootNode.appendChild(distortionL);

%右相机内参矩阵
cameraR_matrix = docNode.createElement('cameraR-matrix'); %创建mat节点
cameraR_matrix.setAttribute('type_id','opencv-matrix'); %设置mat节点属性
rows = docNode.createElement('rows'); %创建行节点
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %创建文本节点,并作为行的子节点
cameraR_matrix.appendChild(rows); %将行节点作为mat子节点

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
cameraR_matrix.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
cameraR_matrix.appendChild(dt);

data = docNode.createElement('data');
for i=1:3
    for j=1:3
        data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrixR(i,j))));
    end
    data.appendChild(docNode.createTextNode(sprintf('\n')));
end
cameraR_matrix.appendChild(data);
docRootNode.appendChild(cameraR_matrix);
%右相机畸变参数
distortionR = docNode.createElement('distortionR');
distortionR.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',5)));
distortionR.appendChild(rows);

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',1)));
distortionR.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
distortionR.appendChild(dt);
data = docNode.createElement('data');
for i=1:5
      data.appendChild(docNode.createTextNode(sprintf('%.16f ',DistortionR(i))));
end
distortionR.appendChild(data);
docRootNode.appendChild(distortionR);

%%旋转矩阵
R = docNode.createElement('R'); %创建mat节点
R.setAttribute('type_id','opencv-matrix'); %设置mat节点属性
rows = docNode.createElement('rows'); %创建行节点
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %创建文本节点,并作为行的子节点
R.appendChild(rows); %将行节点作为mat子节点

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
R.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
R.appendChild(dt);

data = docNode.createElement('data');
for i=1:3
    for j=1:3
        data.appendChild(docNode.createTextNode(sprintf('%.16f ',r(i,j))));
    end
    data.appendChild(docNode.createTextNode(sprintf('\n')));
end
R.appendChild(data);
docRootNode.appendChild(R);
% %
%平移向量
T = docNode.createElement('T');
T.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',3)));
T.appendChild(rows);

cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',1)));
T.appendChild(cols);

dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
T.appendChild(dt);
data = docNode.createElement('data');
for i=1:3
      data.appendChild(docNode.createTextNode(sprintf('%.16f ',t(i))));
end
T.appendChild(data);
docRootNode.appendChild(T);


xmlFileName = file;
xmlwrite(xmlFileName,docNode);
end

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:13:20  更:2021-10-26 12:14:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:28:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码