这是我的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文件的节点值方法详解相关推荐

  1. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  2. python对文件的处理_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  3. python fileinput_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  4. python布尔型数组_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

  5. python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)

    连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...

  6. python2和python3分别是python的两个版本_Windows下Python2与Python3两个版本共存的方法详解...

    前言 一向用Python 3,最近研究微信公众号开发,各云平台只支持Python 2.7,想用其他版本需要自己搭建环境.而网上又搜不到Python 3开发微信公众号的资料.暂打算先使用Python 2 ...

  7. python可以使用二维元组吗_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...

    怎么去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  8. pythonbool类型数组生成_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

  9. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解

    [Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...

  10. 利用栈求表达式的值_高一数学月考考点之函数的表达式详解

    函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...

最新文章

  1. AI应届生年薪涨到40万了,你现在转行还来得及!
  2. 【Python】0/1背包、动态规划
  3. GitLab 502问题的解决
  4. BAPI:KBPP_EXTERN_UPDATE_CO, TCODE:CJ30/CJ40
  5. 软件项目管理0713:三级等保的重要性
  6. JUnit 5 –基础
  7. VDI序曲二十七 IE7,IE8,IE9应用程序虚拟化
  8. mysql 从库 问题_一篇文章帮你解决Mysql 中主从库不同步的问题
  9. 35岁了,转去谷歌做人工智能靠谱吗?
  10. birt插件 web_birt 集成到现有的web应用中
  11. c语言和python的堆栈,python - 在C ++中更快地执行两个程序的可能解释(与Python比较)? - 堆栈内存溢出...
  12. [摘录]第5章 谈判原则
  13. java Socket(TCP)编程小项目
  14. A better zip bomb,比例28000000:1「V2」
  15. 你真的分得清系统误差、随机误差和偶然误差吗?(含例题)
  16. 使用fopen/fwrite/fread/fseek/fclose对文件从头读写整型数
  17. word文档怎么删除论文末尾尾注的横线
  18. 本地域名转向Hosts文件位置
  19. 《第五项修炼》,读后感
  20. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explo注册表病毒

热门文章

  1. 分分钟甩Word几条街,Python编辑公式竟可以如此简单,赶紧收藏!!
  2. 第七节:ES6为数值做了哪些扩展?
  3. javascript 字符串操作函数大全
  4. python中turtle介绍_python中turtle库的简单介绍
  5. mysql java 获取周_Java中获取Mysql中datetime类型的数据
  6. jupyter notebook一些实用技巧
  7. Adobe Experience Design是什么软件?xd mac版下载安装教程 XD 2021发布
  8. 【软考高项】信息系统项目管理师 论文写作技巧分享 (下)
  9. Vue 项目调试总结
  10. ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)