import os
import xml.etree.ElementTree as ET
import cv2 origin_ann_dir = 'D:/Data/MyAnnoData/vmwareData/Annotations/'
new_ann_dir = 'D:/Data/MyAnnoData/vmwareData/save/Annotations/'
new_img_dir = 'D:/Data/MyAnnoData/vmwareData/save/JPEGImages/'
image_dir = 'D:/Data/MyAnnoData/vmwareData/JPEGImages/' #for dirpaths, dirnames, filenames in os.walk(origin_ann_dir):
# for filename in filenames: #xml文件名
file = open("D:/Data/MyAnnoData/vmwareData/0.txt")
for filename in file:
filename = filename.strip("\n")
# if os.path.isfile(r'%s%s' % (origin_ann_dir, filename)):
# origin_ann_path = os.path.join(r'%s%s' % (origin_ann_dir, filename))
# new_ann_path = os.path.join(r'%s%s' % (new_ann_dir, filename)) origin_ann_path = origin_ann_dir + filename
new_ann_path = new_ann_dir + filename
tree = ET.parse(origin_ann_path)
root = tree.getroot() for image_size in root.findall('size'):
imgwidth = int(image_size.find('width').text) #读取图像宽度
imgheight = int(image_size.find('height').text) #读取图像高度 image_size.find('width').text = str(imgwidth)
image_size.find('height').text = str(imgheight) image_name =filename.split('.xml')
imgpath = image_dir + image_name[0] + '.jpg'
img = cv2.imread(imgpath)
if not img.data:
break maxl = max(imgheight, imgwidth) #图片size是maxl*maxl
paddingleft = (maxl - imgwidth) >> 1
paddingright = (maxl - imgwidth) >> 1
paddingbottom = (maxl - imgheight) >> 1
paddingtop = (maxl - imgheight) >> 1
saveimg = cv2.copyMakeBorder(img, paddingtop, paddingbottom, paddingleft, paddingright, cv2.BORDER_CONSTANT,value=0)
cv2.imwrite(new_img_dir + image_name[0] + '.jpg', saveimg) for image_size in root.findall('size'):
image_size.find('width').text = str(maxl)
image_size.find('height').text = str(maxl) for object in root.findall('object'):
name = str(object.find('name').text) #标注对象名
v_bndbox = object.find('bndbox') #目标框位置
x1 = int(v_bndbox.find('xmin').text)
y1 = int(v_bndbox.find('ymin').text)
x2 = int(v_bndbox.find('xmax').text)
y2 = int(v_bndbox.find('ymax').text) x11 = x1 + paddingleft
y11 = y1 + paddingtop
x22 = x11 + (x2-x1+1)
y22 = y11 + (y2-y1+1) v_bndbox.find('xmin').text = str(x11)
v_bndbox.find('ymin').text = str(y11)
v_bndbox.find('xmax').text = str(x22)
v_bndbox.find('ymax').text = str(y22) print(filename)
tree.write(new_ann_path)

修改xml成正方形,保存的更多相关文章

  1. Dom4j修改xml文档引入

    前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...

  2. Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

    1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...

  3. xml基本操作和保存配置文件应用实例

    引言:在实际项目中遇到一些关于xml操作的问题,被逼到无路可退的时候终于决定好好研究xml一番.本文首先介绍了xml的基本操作,后面写了一个经常用到的xml保存配置文件的实例. xml常用方法: 定义 ...

  4. C#创建XML文件并保存

    随着XML的普及以及在动态WEB应用程序中大量应用,如何通过.NET创建,删除,修改XML文件变的也来也重要了.一个简单的概念是,XML文件跟大的文本文件并没有什么区别,同时它是先于.NET出现,很多 ...

  5. 06_XML的写入_dom4j添加、删除、修改Xml文件内容

    [工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...

  6. webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml

    1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...

  7. Java&Xml教程(三)使用DOM方式修改XML文件内容

    DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...

  8. javafx这些学会后,开发就不难了,往tablecloumn列中添加按钮,修改javafx中tableview中tablecell中的值,修改完回车表示保存到内存中

    javafx开发过程中遇见难题,往tablecloumn列中添加按钮 想了很久的方法,也配有办法判断每行中有数据的地方添加按钮set bank_caozuo.setCellFactory((col)- ...

  9. Android studio中修改xml文件无效问题

    昨天遇到的这个问题,在修改布局xml文件后保存,但运行时布局却并没有被修改,也就是说我的修改无效,今天参照了这篇文章中的方法终于解决了: https://blog.csdn.net/l_o_s/art ...

随机推荐

  1. PeopleSoft底层表,闪存查找历史代码(不小心改)

    Oracle 闪存查找历史代码 select * from (SELECT * FROM  PSPCMTXT      AS OF TIMESTAMP to_timestamp('20180725 1 ...

  2. Docker日志收集最佳实践

    传统日志处理 说到日志,我们以前处理日志的方式如下: · 日志写到本机磁盘上 · 通常仅用于排查线上问题,很少用于数据分析 ·需要时登录到机器上,用grep.awk等工具分析 那么,这种方式有什么缺点 ...

  3. day1:java学习第一天之eclipse安装

    选择开发语言的学习其实不用纠结,如果你说自己是做开发的,连最流行的开发语言都不会,好像说不过去,并且最流行也说明用的人多,优秀的人也会,自己要提高要多向优秀的人学习.想明白这点其实选择就好说了,再一个 ...

  4. SQL注入检测方法

    private bool CheckParams(params object[] args){ string[] Lawlesses={"=","'"}; if ...

  5. Requests卡死问题

    https://www.cnblogs.com/niansi/p/7143736.html https://blog.csdn.net/pilipala6868/article/details/807 ...

  6. Linux基础命令---top显示进程信息

    top top指令用来显示Linux的进程信息,这是一个动态显示的过程.top提供运行系统的动态实时视图.它可以显示系统摘要信息以及当前由Linux内核管理的任务列表.所显示的系统摘要信息的类型以及为 ...

  7. react-native 导航器 react-navigation 3.x 使用

    React-navigation 介绍 React Navigation 源于 React Native 社区对一个可扩展且易于使用的导航解决方案的需求,它完全使用 JavaScript 编写. (如 ...

  8. Insert 导致死锁的两种情况

    官档原文,懒得翻译了 https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html INSERT sets an exclusive lo ...

  9. linux目录结构特点

    #####linux目录结构特点一切从根开始linx中每个设备可以挂载在任何目录上面磁盘/设备/分区没有挂载 无法使用 举例-linux下面使用光盘###1.把光盘放入到光驱中 ###2.linux中 ...

  10. java窗体

    听完老师所讲的窗体,然后自己就去尝试写代码,结果是窗体出现了,但是就是不能关闭,求解!! package Swing.src.swring; import java.awt.Color;import ...