修改xml成正方形,保存
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成正方形,保存的更多相关文章
- Dom4j修改xml文档引入
前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...
- Java xml 操作(Dom4J修改xml + xPath技术 + SAX解析 + XML约束)
1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...
- xml基本操作和保存配置文件应用实例
引言:在实际项目中遇到一些关于xml操作的问题,被逼到无路可退的时候终于决定好好研究xml一番.本文首先介绍了xml的基本操作,后面写了一个经常用到的xml保存配置文件的实例. xml常用方法: 定义 ...
- C#创建XML文件并保存
随着XML的普及以及在动态WEB应用程序中大量应用,如何通过.NET创建,删除,修改XML文件变的也来也重要了.一个简单的概念是,XML文件跟大的文本文件并没有什么区别,同时它是先于.NET出现,很多 ...
- 06_XML的写入_dom4j添加、删除、修改Xml文件内容
[工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...
- webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml
1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...
- Java&Xml教程(三)使用DOM方式修改XML文件内容
DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...
- javafx这些学会后,开发就不难了,往tablecloumn列中添加按钮,修改javafx中tableview中tablecell中的值,修改完回车表示保存到内存中
javafx开发过程中遇见难题,往tablecloumn列中添加按钮 想了很久的方法,也配有办法判断每行中有数据的地方添加按钮set bank_caozuo.setCellFactory((col)- ...
- Android studio中修改xml文件无效问题
昨天遇到的这个问题,在修改布局xml文件后保存,但运行时布局却并没有被修改,也就是说我的修改无效,今天参照了这篇文章中的方法终于解决了: https://blog.csdn.net/l_o_s/art ...
随机推荐
- Docker日志收集最佳实践
传统日志处理 说到日志,我们以前处理日志的方式如下: · 日志写到本机磁盘上 · 通常仅用于排查线上问题,很少用于数据分析 ·需要时登录到机器上,用grep.awk等工具分析 那么,这种方式有什么缺点 ...
- JQ得到当前登录城市和天气
$(function () { findWeather(); }); function findWeather() { var cityUrl = 'http://int.dpool.sina.com ...
- sql server中的全局变量,常用的没有多少...以后看看就行
全局变量格式: @@*** 这些变量有系统维护,不需要我们自己定义,一般都是用来查看信息. 在存储过程中 用得最多的 @@error,判断有没有错误信息. 一.@@version:查看版本信息 二. ...
- Excel坐标自动在AutoCad绘图_3
众所周知,Excel对数据处理的功能非常强大,它可以进行数据处理.统计分析已经辅助决策的操作,该软件已经渗透到各个领域.作为一个测绘人,GISer, 也经常利用excel完成一些测量表格的自动化计算, ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
C 模拟 题意:给的是一个矩形,然后√2 的速度走,如果走到边上就正常反射,走到角上,暂停反射,我们知道要不循环要不暂停,记录走到的点最短时间 /*************************** ...
- git clone git@github.com:snuglove/ 报错
[root@qc_centos7_5 ~]# git clone git@github.com:snuglove/Job-hunting-related.git Cloning into 'Job-h ...
- Machine Learning 第三周
ML week3 逻辑回归 Logistic Function h_\theta(x)=g(\theta^Tx) g(t)=\frac{1}{1+e^{-z}} 当t大于0, 即下面公式成立时,y=1 ...
- git 使用过程中遇到的问题does not appear to be a git repository Could not read from remote respository
想把本地的git库上传到github上.github已经新建了一个public仓库,利用网站的命令 git Bash报错:does not appear to be a git repository ...
- vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接
vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接 需求:自己app打开的登录页面不显示app下载链接.其他地方打开判断android手机的跳转到android下载页链 ...
- BP神经网络(原理及MATLAB实现)
人工神经网络概述: 人工神经元模型: 神经网络的分类: 按照连接方式,可以分为:前向神经网络 vs. 反馈(递归)神经网络: 按照学习方式,可以分为:有导师学习神经网络 vs. 无导师学习神经网络: ...