python修改xml标签的值_对python修改xml文件的节点值方法详解
这是我的xml文件结构
<?xml version='1.0' encoding='utf-8'?>
JPEGImages
train_2018-05-08_1000.jpg
D:\all_data\2018-05-08\JPEGImages\train_2018-05-08_1000.jpg
Unknown
4032
3024
3
0
yl-ylhzdhmbbz-gz-hm-280g
Unspecified
0
0
1863
355
2512
902
hy-hybfbgz-hz-xcw-200ml
Unspecified
0
0
1076
1602
1648
2105
ys-zzyspyz-gz-yw-245ml
Unspecified
1
0
2017
2475
2681
3024
mn-zgl-hz-cmw-250ml
Unspecified
0
0
1849
1207
2242
2047
qc-qckf-pz-shnt-268ml
Unspecified
0
0
480
1213
1308
1544
wt-wtcyl-gz-nm-310ml
Unspecified
0
0
867
488
1527
938
现在想实现的是修改图像的size和目标
__author__ = 'Sam'
import cv2
import xml.etree.ElementTree as ET
import os
import sys
import lxml
import shutil
#user input files path
path="E:/test_folder"
image_path = path + "/Annotations/" #image path with .jpg ending
label_path = path + "/JPEGImages/" #label path with .xml ending
min_size=800
def search_jpg_xml(image_dir,label_dir):
#find out all of sepecified file
image_ext='.jpg'
img=[fn for fn in os.listdir(image_dir) if fn.endswith(image_ext)]
label_ext='.xml'
label=[fn for fn in os.listdir(label_dir) if fn.endswith(label_ext)]
return img, label
def copyfile():
if "Annotations_temp" in os.listdir(path):
shutil.rmtree(path+"/Annotations_temp")
if "JPEGImages_temp" in os.listdir(path):
shutil.rmtree(path+"/JPEGImages_temp")
save_annotation_path=path+"/Annotations_temp/"
save_jpg_path=path+"/JPEGImages_temp/"
shutil.copytree(path + "/Annotations",save_annotation_path)
shutil.copytree(path + "/JPEGImages", save_jpg_path)
return save_jpg_path ,save_annotation_path
def write_xml_jpg(jpg_path,annotation_path):
img,label=search_jpg_xml(jpg_path,annotation_path)
sorted(img)
sorted(label)
print(img)
print(label)
if "Annotations_1" not in os.listdir(path):
os.mkdir(path+"/Annotations_1")
if "JPEGImages_1" not in os.listdir(path):
os.mkdir(path+"/JPEGImages_1")
new_image_path=path+"/JPEGImages_1/"
new_annotation_path=path+"/Annotations_1/"
for index,file in enumerate(label):
cur_img = cv2.imread(jpg_path+img[index])
width=cur_img.shape[1]
height=cur_img.shape[0]
if width
new_width=min_size
new_height=int(min_size*height/width)
w_ratio=new_width/width
h_ratio=new_height/height
elif width>height:
new_width=int(min_size*width/height)
new_height=min_size
w_ratio=new_width/width
h_ratio=new_height/height
elif width==height:
new_width=min_size
new_height=min_size
w_ratio=new_width/width
h_ratio=new_height/height
cur_img = cv2.resize(cur_img, (new_width, new_height))
cv2.imwrite(new_image_path+img[index],cur_img)
cur_xml = ET.parse(annotation_path+file)
root = cur_xml.getroot()
for node in root:
if node.tag=='size':
node[0].text=str(new_width)
node[1].text=str(new_height)
elif node.tag=='object':
xmin=int(node[4][0].text)#bbox position
ymin=int(node[4][1].text)
xmax=int(node[4][2].text)
ymax=int(node[4][3].text)
node[4][0].text=str(int(xmin*w_ratio))
node[4][1].text=str(int(ymin*h_ratio))
node[4][2].text=str(int(xmax*w_ratio))
node[4][3].text=str(int(ymax*h_ratio))
cur_xml.write(new_annotation_path+file)
shutil.rmtree(path+"/JPEGImages_temp")
shutil.rmtree(path+"/Annotations_temp")
if __name__ == "__main__":
jpg_path,annotation_path=copyfile()
write_xml_jpg(jpg_path,annotation_path)
最关键语句是:
node[4][3].text=str(int(ymax*h_ratio)),注意xml节点的操作是字符型!!!
以上这篇对python修改xml文件的节点值方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
本文标题: 对python修改xml文件的节点值方法详解
本文地址: http://www.cppcns.com/jiaoben/python/248200.html
python修改xml标签的值_对python修改xml文件的节点值方法详解相关推荐
- python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解
如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...
- python对文件的处理_python文件处理fileinput使用方法详解
这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...
- python fileinput_python文件处理fileinput使用方法详解
这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...
- python布尔型数组_对numpy中布尔型数组的处理方法详解
布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...
- python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)
连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...
- python2和python3分别是python的两个版本_Windows下Python2与Python3两个版本共存的方法详解...
前言 一向用Python 3,最近研究微信公众号开发,各云平台只支持Python 2.7,想用其他版本需要自己搭建环境.而网上又搜不到Python 3开发微信公众号的资料.暂打算先使用Python 2 ...
- python可以使用二维元组吗_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...
怎么去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...
- pythonbool类型数组生成_对numpy中布尔型数组的处理方法详解
布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...
- java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解
[Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...
- 利用栈求表达式的值_高一数学月考考点之函数的表达式详解
函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...
最新文章
- AI应届生年薪涨到40万了,你现在转行还来得及!
- 【Python】0/1背包、动态规划
- GitLab 502问题的解决
- BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40
- 软件项目管理0713:三级等保的重要性
- JUnit 5 –基础
- VDI序曲二十七 IE7,IE8,IE9应用程序虚拟化
- mysql 从库 问题_一篇文章帮你解决Mysql 中主从库不同步的问题
- 35岁了,转去谷歌做人工智能靠谱吗?
- birt插件 web_birt 集成到现有的web应用中
- c语言和python的堆栈,python - 在C ++中更快地执行两个程序的可能解释(与Python比较)? - 堆栈内存溢出...
- [摘录]第5章 谈判原则
- java Socket(TCP)编程小项目
- A better zip bomb,比例28000000:1「V2」
- 你真的分得清系统误差、随机误差和偶然误差吗?(含例题)
- 使用fopen/fwrite/fread/fseek/fclose对文件从头读写整型数
- word文档怎么删除论文末尾尾注的横线
- 本地域名转向Hosts文件位置
- 《第五项修炼》,读后感
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explo注册表病毒
热门文章
- 分分钟甩Word几条街,Python编辑公式竟可以如此简单,赶紧收藏!!
- 第七节:ES6为数值做了哪些扩展?
- javascript 字符串操作函数大全
- python中turtle介绍_python中turtle库的简单介绍
- mysql java 获取周_Java中获取Mysql中datetime类型的数据
- jupyter notebook一些实用技巧
- Adobe Experience Design是什么软件?xd mac版下载安装教程 XD 2021发布
- 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
- Vue 项目调试总结
- ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)