matlab写出图片标注之后的XML文件脚本

clear
clc

load('L4456_2d.mat');
path = dir('C:\Users\admin\Desktop\ssd_label\positiveInstances\*.png');
a = Lff4456;
col = size(a,2);
for j = 1:col
    if find(a(:,j)==0)
        idx = find(a(:,j)==0);
        a(idx(1),j)=a(idx(1)+1,j);
    end
end
num = size(a,1);
for i = 1:num
    docNode = com.mathworks.xml.XMLUtils.createDocument('annotation');
    docRootNode = docNode.getDocumentElement;


    foldrNode = docNode.createElement('folder'); 
    foldrNode.appendChild(docNode.createTextNode(sprintf('images')));
    docRootNode.appendChild(foldrNode);
    
    fileNmNode = docNode.createElement('filename');
    pathname = path(i);
    foldername = pathname.folder;
    imagename = pathname.name;
    filename_out = strcat(foldername ,'\',imagename);
    fileNmNode.appendChild(docNode.createTextNode(imagename));
    docRootNode.appendChild(fileNmNode);
    
    pathNode = docNode.createElement('path');
    pathNode.appendChild(docNode.createTextNode(filename_out));
    docRootNode.appendChild(pathNode);
    
    thisElement = docNode.createElement('source');
    docRootNode.appendChild(thisElement);
        databaseNode = docNode.createElement('database');
        databaseNode.appendChild(docNode.createTextNode(sprintf('Unknown')));
        thisElement.appendChild(databaseNode);
    
    sizeNode = docNode.createElement('size');
    docRootNode.appendChild(sizeNode);
        widthNode = docNode.createElement('width');
        widthNode.appendChild(docNode.createTextNode(sprintf('752')));
        sizeNode.appendChild(widthNode);
        
        heigthNode = docNode.createElement('height');
        heigthNode.appendChild(docNode.createTextNode(sprintf('480')));
        sizeNode.appendChild(heigthNode);
        
        depthNode = docNode.createElement('depth');
        depthNode.appendChild(docNode.createTextNode(sprintf('1')));
        sizeNode.appendChild(depthNode);
        
    segmentedNode = docNode.createElement('segmented');
    segmentedNode.appendChild(docNode.createTextNode(sprintf('0')));
    docRootNode.appendChild(segmentedNode);
    %%取出跟踪的坐标,以坐标为中心选取边长为8的正方形为目标标注数据
        b = a(i,:);
        b(:,85)=[];
        x_b = b(1:2:end);
        y_b = b(2:2:end);
        rand1 = randi(5-2)*rand(1,1)+2;
        rand2 = randi(5-2)*rand(1,1)+2;
        rand3 = randi(5-2)*rand(1,1)+2;
        rand4 = randi(5-2)*rand(1,1)+2;
        for j=1:size(x_b,2)
             xmin = round(x_b(:,j)-rand1);
             ymin = round(y_b(:,j)-rand2);
             xmax = round(x_b(:,j)+rand3);
             ymax = round(y_b(:,j)+rand4);
             %object节点     
             objectNode = docNode.createElement('object');
             docRootNode.appendChild(objectNode);
             %name节点
             nameNode = docNode.createElement('name');
             nameID = num2str(j);
             name_out = strcat('point',nameID);
             nameNode.appendChild(docNode.createTextNode(name_out));
             objectNode.appendChild(nameNode);
             %pose节点
             poseNode = docNode.createElement('pose');
             poseNode.appendChild(docNode.createTextNode(sprintf('Unspecified')));
             objectNode.appendChild(poseNode);
             %truncated节点
             truncatedNode = docNode.createElement('truncated');
             truncatedNode.appendChild(docNode.createTextNode(sprintf('0')));
             objectNode.appendChild(truncatedNode);
             %difficult节点
             difficultNode = docNode.createElement('difficult');
             difficultNode.appendChild(docNode.createTextNode(sprintf('0')));
             objectNode.appendChild(difficultNode);
             %bndbox节点
             bndboxNode = docNode.createElement('bndbox');
             objectNode.appendChild(bndboxNode);
        
            xminNode = docNode.createElement('xmin');
            xmin_out = num2str(xmin);
            xminNode.appendChild(docNode.createTextNode(xmin_out));
            bndboxNode.appendChild(xminNode);
            
            yminNode = docNode.createElement('ymin');
            ymin_out = num2str(ymin);
            yminNode.appendChild(docNode.createTextNode(ymin_out));
            bndboxNode.appendChild(yminNode);
            
            xmaxNode = docNode.createElement('xmax');
            xmax_out = num2str(xmax);
            xmaxNode.appendChild(docNode.createTextNode(xmax_out));
            bndboxNode.appendChild(xmaxNode);
            
            ymaxNode = docNode.createElement('ymax');
            ymax_out = num2str(ymax);
            ymaxNode.appendChild(docNode.createTextNode(ymax_out));
            bndboxNode.appendChild(ymaxNode);
        
        
            xmlname = imagename(1:end-4);
            xmlFileName = [xmlname,'.xml'];
            xmlwrite(xmlFileName,docNode); 
     
        end
        
end
这里用到的数据是人脸mark点的坐标数据,可以转成bndbox数据,如果想把有规律的标注数据转成labelimage工具标注的数据格格式,可以参考这个。https://pan.baidu.com/s/16OUSA4zDo6y1mOssWVbcvA用到的.mat数据,图片数据就不方了,涉及隐私

将导入的图片中颜色相同的点的范围写入xml。 使用说明: 2.2.1 默认 系统窗体根据配置文件显示当前时间应关闭的区域。 注:可在界面下方的表格中修改关闭区域的相关信息,按【Enter】键完成修改,相关信息将在打印时显示。 2.2.2 临时区域 a) 在下拉列表框中(或鼠标左键单击图片中需关闭的区域)选择关闭区域或机位,系统窗体显示临时关闭的区域。 b) 在图片中的关闭区域单击鼠标右键(或双击工具栏中列表框中的滑行道、机位等,或在工具栏中的列表框中选择删除区域,单击鼠标右键选择【删除该区域】),取消所选关闭区域。 c) 在工具栏中的列表框中选择区域,单击鼠标右键选择【修改区域名】,在标签“请输入新的区域名称”下方的下拉列表框中输入新的区域名称,按【Enter】键,当列表框中所选区域名改变时,此修改操作完成。 注:1.选择多块区域:单击鼠标左键选择开始区域,单击鼠标右键选择结束区域,则界面显示开始区域至结束区域间所有区域,区域名称为“开始区域名”+“至”+“结束区域名”。 2.可如c)修改区域名称。 2.2.3 配置计划 2.2.3.1 重新配置 删除配置文件中所有已有关闭区域的信息。以便于重新配置。 2.2.3.2 增加配置 增加新的关闭区域配置。 a) 配置开始时间和结束时间。 b) 用户可在下拉列表框中(或在图片中单击鼠标左键)选择关闭区域或机位,亦可点击【导入时间段】按钮,复制已有的配置信息。 c) 点击【增加时间段】按钮,将当前配置的关闭区域作为新的时间段添加到配置文件中。 d) 删除关闭区域:在工具栏的列表框中选择删除区域并双击鼠标左键,或单击鼠标右键选择【删除该区域】,亦或在图形界面上双击鼠标右键删除关闭区域。 e) 点击【保存】按钮,保存当前配置的区域信息,并进入下一新增区域配置。 f) 点击【返回】按钮,完成该操作。 注:选择多块区域:单击鼠标左键选择开始区域,单击鼠标右键选择结束区域,则选择且界面显示开始区域至结束区域间所有区域,区域名称为“开始区域名”+“至”+“结束区域名”。 2.2.3.3 修改配置 修改已有的关闭区域的配置信息。 a) 点击【增加时间段】按钮,增加新的时间段,以便于在不同时间关闭其他区域。 b) 点击【删除时间段】按钮,删除已有的时间段。 c) 点击【保存】按钮,保存修改后的配置信息。 d) 点击【清空】按钮,清除当前显示的关闭区域。 e) 在工具栏的列表框中选择区域,单击鼠标右键选择【修改区域名】,在标签“请输入新的区域名称”下方的下拉列表框中输入新的区域名称,按【Enter】键,当列表框中所选区域名改变时,此修改操作完成。 f) 点击【返回】按钮,完成该操作。 注:1.选择多块区域:单击鼠标左键选择开始区域,单击鼠标右键选择结束区域,则选择且界面显示开始区域至结束区域间所有区域,区域名称为“开始区域名”+“至”+“结束区域名”。 2.当选择时间段号后,可在图形界面上进行选择操作,否则鼠标无法选择关闭区域。 2.2.3.4 删除配置 在下拉列表框中选择要删除第几天的区域,点击【删除】按钮,删除所选区域的相关配置信息。 2.2.3.5 查询配置 选择区域下拉列表框中的数据,显示该天所有时间段的关闭区域。选择时间段下拉列表框的数据,显示该时间段的关闭区域,并显示开始时间及结束时间。 2.2.3.6 设置开始日期 选择日期作为“第1天”区域的开始日期,系统根据日期循环显示关闭区域。 2.2.4 全部区域 显示所有可以关闭的区域。 2.2.5 日期查询 选择“开始日期”以后的日期,显示该天的所有时间段的相关信息。 2.2.6 背景颜色 点击【背景颜色】按钮,可选择背景颜色。 2.2.7 打印 打印当前显示的关闭区域、相关信息和备注。 注:1.选择【纸张类型】及【方向】。 2.当图形界面下方表格中的【关闭区域】列中的信息过长时将无法完全打印,请适当修改区域名称或手动剪切部分信息至新的一行。 2.2.8 备注 编写“备注”的文本信息。 注:在“备注”框上,按住鼠标左键,“备注”随鼠标移动。 配置说明: Data文件夹包含Area_Show.xml、Areas_Config.xml、ColorRange.xml三个文档。 说明如下: Area_Show.xml为 CloseAreas.exe生成的配置文件,用于记录关闭区域的相关信息。 Areas_Config.xml记录位图“浦东机场(副本1).bmp”中不同颜色所对应的区域名称。 例: <Area> <Name>1</Name> //区域名称为:(机位)1 <Color>ff0101e7</Color> //位图上的所对应的颜色名称。 <RGB>1,1,231</RGB> //位图上所对应颜色的RGB值。 </Area> 。。。。。。 <Area> <Name>A2(不含)-B1(不含)/B</Name> //区域名称:(跑道)A2(不含)-B1(不含)/B <Color>ff02ac04</Color> //位图上的所对应的颜色名称。 <RGB>2,172,4</RGB> //位图上所对应颜色的RGB值。 </Area> 。。。。。。 <Area> //多块区域构建组合区域 <Name>滑边</Name> //区域名称:(别名)滑边 <Color>ff6e7fff</Color> //同时显示多块区域时, <Color>ff6f80ff</Color> //将各区域对应的颜色名称写入此处。 <Color>ff8073ff</Color> <Color>ff7080ff</Color> 。。。。。。 </Area> ColorRange.xml为Write_Config.exe生成的配置文件,用于记录位图“浦东机场(副本1).bmp”中不同颜色的范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值