zoukankan      html  css  js  c++  java
  • MATLAB相机标定转XMl代码

    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)]; %当RadialDistortion为3维时,构成opencv中的畸变系数向量[k1,k2,p1,p2,k3]
    Distortion = [RadialDistortion(1:2),TangentialDistortion,0]; %当RadialDistortion为2维时,构成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(newline));
    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
    
  • 相关阅读:
    浏览器返回错误汇总分析
    黄金投资品种众多 个人如何投资黄金
    .NET设计模式系列文章 (转自TerryLee's Tech Space)
    .NET设计模式(7):创建型模式专题总结(Creational Pattern)
    一个很经典的下拉式菜单(附效果)
    .NET设计模式(16):模版方法(Template Method)
    搜索引擎优化基础(转并整理添加)
    .NET设计模式(18):迭代器模式(Iterator Pattern)
    【ASP.NET】网页中嵌入视频的三种方法
    .NET设计模式(15):结构型模式专题总结
  • 原文地址:https://www.cnblogs.com/xingkongcanghai/p/11862534.html
Copyright © 2011-2022 走看看