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 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> mat转xml脚本 -> 正文阅读

[Python知识库]mat转xml脚本

这不是通用版本,需要改成自己的xml节点,思路是通用的

from pickle import OBJ
# from posix import listdir
from matplotlib.pyplot import text
import scipy.io as sio
import os,glob
import xml.etree.ElementTree as ET
import xml.dom.minidom as DOM
import cv2

pwd = os.getcwd()
print(pwd)
mat_input = r'C:\Users\Lenovo\Desktop\mat_'
xml_output = r'C:\Users\Lenovo\Desktop\xml_'
img_input = r'C:\Users\Lenovo\Desktop\img_'


def read_mat(mat_input):
    file = os.listdir(mat_input)
    for i,file_name in enumerate(file):
        img = cv2.imread(glob.glob(os.path.join(img_input,file_name.replace('mat','jpg')))[0])
        size = img.shape[0]
        point_list = []
        xml_path = mat_input + '\\' + file_name.replace('mat','xml')
        print("xml_path:",xml_path)
        mat_data = sio.loadmat(glob.glob(os.path.join(mat_input + '\\' + file_name))[0])
        # print(mat_data.keys(),type(mat_data))
        for key in mat_data.keys():
            if key == 'marks':
                point_list.append(mat_data['marks'])
        print(point_list)
        save_xml(file_name,point_list,size)
    

def save_xml(file_name,point_list,size):
    #首先创建根节点 
    root = ET.Element('annotation') 
    #添加子节点SubElement(父节点Element对象, Tag字符串格式, Attribute字典格式) 
    folder1 = ET.SubElement(root, 'folder') 
    filename1 = ET.SubElement(root, 'filename')
    path1 = ET.SubElement(root,'path')
    source1 = ET.SubElement(root,'source')
    size1 = ET.SubElement(root,'size')
    segmented1 = ET.SubElement(root,'segmented')
    for i,value in enumerate(point_list[0]):
        object1 = ET.SubElement(root,'object')
        name1 = ET.SubElement(object1,'name')
        pose1 = ET.SubElement(object1,'pose')
        truncated1 = ET.SubElement(object1,'truncated')
        difficult1 = ET.SubElement(object1,'difficult')
        bndbox = ET.SubElement(object1,'bndbox')
        xmin = ET.SubElement(bndbox,'xmin')
        ymin = ET.SubElement(bndbox,'ymin')
        xmax = ET.SubElement(bndbox,'xmax')
        ymax = ET.SubElement(bndbox,'ymax')
        name1.text = 'cross'
        pose1.text = 'Unspecified'
        truncated1.text = '0'
        difficult1.text = '0'
        print('value[0]:',type(value[0]),value[0])
        xmin.text = str(int((round(value[0])*416)/600 - 9))
        ymin.text = str(int((round(value[1])*416)/600 + 9))
        xmax.text = str(int((round(value[0])*416)/600 + 9))
        ymax.text = str(int((round(value[1])*416)/600 - 9))

    #添加子节点 
    database1 = ET.SubElement(source1, 'database') 
    width1 = ET.SubElement(size1,'width')
    height1 = ET.SubElement(size1,'height')
    depth1 = ET.SubElement(size1,'depth')

    #添加text
    folder1.text = img_input.split('\\')[-1]
    filename1.text = file_name.replace('mat','jpg')
    path1.text = img_input + '\\' + file_name.replace('mat','jpg')
    database1.text = 'Unknow'
    width1.text = str(size)
    height1.text = str(size)
    depth1.text = '3'
    segmented1.text = '0'

    #写入保存并格式化
    word = prettify(root)
    with open(xml_output+ '\\' + file_name.replace('mat','xml'),'w') as f:
        f.write(word)  

        #将根目录转化为xml树状结构(即ElementTree对象) 
        # tree = ET.ElementTree(root) 
        # #在终端显示整个xml内容 
        # ET.dump(root) 
        # #写入xml文件 
        # tree.write(xml_output+ '\\' + file_name.replace('mat','xml'), encoding="utf-8", xml_declaration=True,method='xml')


def prettify(elem):
    """将节点转换成字符串,并添加缩进。
    """
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = DOM.parseString(rough_string)
    return reparsed.toprettyxml(indent="\t")
        

read_mat(mat_input)

#我这里需要resize下图片,不需要的可以不用。
def resize(img_list):
    for i in img_list:
        imgname = glob.glob(os.path.join(img_input,i))
        img = cv2.imread(imgname[0])
        print(img.shape[0])
        img = cv2.resize(img,(416,416))
        cv2.imwrite(imgname[0],img)

img_list = os.listdir(img_input)
# resize(img_list)




    

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:59:03  更:2021-12-07 12:01:32 
 
开发: 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/16 5:42:15-

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