如何基于matlab相机标定导出xml文件


Posted in Python onNovember 02, 2020

1 参数选择 径向畸变3个参数还是两个参数

默认两个参数

如何基于matlab相机标定导出xml文件

如果是三个参数

如何基于matlab相机标定导出xml文件

2准备转化生成结果

如何基于matlab相机标定导出xml文件

如何基于matlab相机标定导出xml文件

二参数的转化代码

writeExternalandIntrinsicMatrix(cameraParams62,'cameraParams622.xml');

如何基于matlab相机标定导出xml文件

function writeExternalandIntrinsicMatrix(cameraParams,file)
%writeXML(cameraParams,file)
 
docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage');
docRootNode = docNode.getDocumentElement;
IntrinsicMatrix = ((cameraParams.IntrinsicMatrix)');
 
TangentialDistortion =cameraParams.TangentialDistortion;
%Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion, cameraParams.RadialDistortion(3)];
Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion,0];
FocalLength = cameraParams.FocalLength;
camera_matrix = docNode.createElement('IntrinsicCam'); %锟斤拷锟斤拷mat锟节碉拷
camera_matrix.setAttribute('type_id','opencv-matrix'); %锟斤拷锟斤拷mat锟节碉拷锟斤拷锟斤拷
rows = docNode.createElement('rows'); %锟斤拷锟斤拷锟叫节碉拷
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %锟斤拷锟斤拷锟侥憋拷锟节点,锟斤拷锟斤拷为锟叫碉拷锟接节碉拷
camera_matrix.appendChild(rows); %锟斤拷锟叫节碉拷锟斤拷为mat锟接节碉拷
 
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
camera_matrix.appendChild(cols);
 
dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
camera_matrix.appendChild(dt);
 
data = docNode.createElement('data');
for i=1:3
  for j=1:3
    data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j))));
  end
  data.appendChild(docNode.createTextNode(sprintf('\n')));
end
camera_matrix.appendChild(data);
docRootNode.appendChild(camera_matrix);
 
distortion = docNode.createElement('DistortionCam');
distortion.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',1)));
distortion.appendChild(rows);
 
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',5)));
distortion.appendChild(cols);
 
dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
distortion.appendChild(dt);
data = docNode.createElement('data');
for i=1:5
   data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i))));
end
distortion.appendChild(data);
docRootNode.appendChild(distortion);
 
 
focalLength = docNode.createElement('FocalLength');
focalLength.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',1)));
focalLength.appendChild(rows);
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',1)));
focalLength.appendChild(cols);
dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
focalLength.appendChild(dt);
data = docNode.createElement('data');
for i=1:1
   data.appendChild(docNode.createTextNode(sprintf('%.16f ',FocalLength(i))));
end
focalLength.appendChild(data);
docRootNode.appendChild(focalLength);
 
% distortion = docNode.createElement('Pmatrix');
% distortion.setAttribute('type_id','opencv-matrix');
% rows = docNode.createElement('rows');
% rows.appendChild(docNode.createTextNode(sprintf('%d',1)));
% distortion.appendChild(rows);
%
% cols = docNode.createElement('cols');
% cols.appendChild(docNode.createTextNode(sprintf('%d',4)));
% distortion.appendChild(cols);
%
% dt = docNode.createElement('dt');
% dt.appendChild(docNode.createTextNode('d'));
% distortion.appendChild(dt);
% data = docNode.createElement('data');
% for i=1:4
%    data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i))));
% end
% distortion.appendChild(data);
% docRootNode.appendChild(distortion);
 
 
xmlFileName = file;
xmlwrite(xmlFileName,docNode);
end

二参数的保存结果

<?xml version="1.0" encoding="utf-8"?>
<opencv_storage>
  <IntrinsicCam type_id="opencv-matrix">
   <rows>3</rows>
   <cols>3</cols>
   <dt>d</dt>
   <data>1558.5669994681102253 0.0000000000000000 821.5211092415044050
0.0000000000000000 1557.8077127262038175 460.9748043702705331
0.0000000000000000 0.0000000000000000 1.0000000000000000
</data>
  </IntrinsicCam>
  <DistortionCam type_id="opencv-matrix">
   <rows>1</rows>
   <cols>5</cols>
   <dt>d</dt>
   <data>-0.1873006682834817 0.0171597428423078 0.0000000000000000 0.0000000000000000 0.0000000000000000 </data>
  </DistortionCam>
  <FocalLength type_id="opencv-matrix">
   <rows>1</rows>
   <cols>1</cols>
   <dt>d</dt>
   <data>1558.5669994681102253 </data>
  </FocalLength>
</opencv_storage>

三参数的转化代码

function writeXML(cameraParams,file)
%writeXML(cameraParams,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; %获取根节点
 
IntrinsicMatrix = (cameraParams.IntrinsicMatrix)'; %相机内参矩阵
RadialDistortion = cameraParams.RadialDistortion; %相机径向畸变参数向量1*3
TangentialDistortion =cameraParams.TangentialDistortion; %相机切向畸变向量1*2
  Distortion = [RadialDistortion(1:2),TangentialDistortion,RadialDistortion(3)]; %构成opencv中的畸变系数向量[k1,k2,p1,p2,k3]
 
camera_matrix = docNode.createElement('camera-matrix'); %创建mat节点
camera_matrix.setAttribute('type_id','opencv-matrix'); %设置mat节点属性
rows = docNode.createElement('rows'); %创建行节点
rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %创建文本节点,并作为行的子节点
camera_matrix.appendChild(rows); %将行节点作为mat子节点
 
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',3)));
camera_matrix.appendChild(cols);
 
dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
camera_matrix.appendChild(dt);
 
data = docNode.createElement('data');
for i=1:3
  for j=1:3
    data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j))));
  end
  data.appendChild(docNode.createTextNode(sprintf('\n')));
end
camera_matrix.appendChild(data);
docRootNode.appendChild(camera_matrix);
 
distortion = docNode.createElement('distortion');
distortion.setAttribute('type_id','opencv-matrix');
rows = docNode.createElement('rows');
rows.appendChild(docNode.createTextNode(sprintf('%d',5)));
distortion.appendChild(rows);
 
cols = docNode.createElement('cols');
cols.appendChild(docNode.createTextNode(sprintf('%d',1)));
distortion.appendChild(cols);
 
dt = docNode.createElement('dt');
dt.appendChild(docNode.createTextNode('d'));
distortion.appendChild(dt);
data = docNode.createElement('data');
for i=1:5
   data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i))));
end
distortion.appendChild(data);
 
docRootNode.appendChild(distortion);
 
xmlFileName = file;
xmlwrite(xmlFileName,docNode);
end

三参数的转化保存结果

<?xml version="1.0" encoding="utf-8"?>
<opencv_storage>
  <camera-matrix type_id="opencv-matrix">
   <rows>3</rows>
   <cols>3</cols>
   <dt>d</dt>
   <data>1558.6100144620272658 0.0000000000000000 821.6453269280840459
0.0000000000000000 1557.8120286433929778 460.8682816753835141
0.0000000000000000 0.0000000000000000 1.0000000000000000
</data>
  </camera-matrix>
  <distortion type_id="opencv-matrix">
   <rows>5</rows>
   <cols>1</cols>
   <dt>d</dt>
   <data>-0.1840928673709393 -0.0328189923757994 0.0000000000000000 0.0000000000000000 0.2205440258401062 </data>
  </distortion>
</opencv_storage>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的各种装饰器详解
Apr 11 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
python基于multiprocessing的多进程创建方法
Jun 04 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
python字符串的拼接方法总结
Nov 18 Python
pip install命令安装扩展库整理
Mar 02 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 #Python
Python如何急速下载第三方库详解
Nov 02 #Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 #Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 #Python
jupyter notebook 写代码自动补全的实现
Nov 02 #Python
Python QT组件库qtwidgets的使用
Nov 02 #Python
python利用opencv保存、播放视频
Nov 02 #Python
You might like
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
FCK调用方法..
2006/12/21 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
微信小程序实现音乐播放器
2019/11/20 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python图像和办公文档处理总结
2019/05/28 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
python扫描线填充算法详解
2020/02/19 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
车间班长岗位职责
2013/11/30 职场文书
住宅使用说明书
2014/05/09 职场文书
班组建设经验交流材料
2014/05/12 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
设计大赛策划方案
2014/06/13 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
Python包argparse模块常用方法
2021/06/04 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python