• 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
    
  • 相关阅读:
    领域驱动设计概念(Domain-driven Design), Flower(响应式微服务框架)
    主流RPC框架通讯协议实现原理与源码解析
    响应式微服务框架Flower——快速上手
    netty源码-server端绑定端口流程
    ubuntu 20.04版本更新软件源为国内源(清华、网易、阿里云等等)
    ubuntu20.04源码安装nginx
    docker环境下Java获取cpu核心数不准确,实际上是宿主机的cpu核心数
    利用docker快速搭建创建开发环境
    mac配置python环境
    Apache Maven-创建项目
  • 原文地址:https://www.cnblogs.com/xingkongcanghai/p/11862534.html
Copyright © 2020-2023  润新知