1. import os
  2. import xml.etree.ElementTree as ET
  3. import cv2
  4.  
  5. origin_ann_dir = 'D:/Data/MyAnnoData/vmwareData/Annotations/'
  6. new_ann_dir = 'D:/Data/MyAnnoData/vmwareData/save/Annotations/'
  7. new_img_dir = 'D:/Data/MyAnnoData/vmwareData/save/JPEGImages/'
  8. image_dir = 'D:/Data/MyAnnoData/vmwareData/JPEGImages/'
  9.  
  10. #for dirpaths, dirnames, filenames in os.walk(origin_ann_dir):
  11. # for filename in filenames: #xml文件名
  12. file = open("D:/Data/MyAnnoData/vmwareData/0.txt")
  13. for filename in file:
  14. filename = filename.strip("\n")
  15. # if os.path.isfile(r'%s%s' % (origin_ann_dir, filename)):
  16. # origin_ann_path = os.path.join(r'%s%s' % (origin_ann_dir, filename))
  17. # new_ann_path = os.path.join(r'%s%s' % (new_ann_dir, filename))
  18.  
  19. origin_ann_path = origin_ann_dir + filename
  20. new_ann_path = new_ann_dir + filename
  21. tree = ET.parse(origin_ann_path)
  22. root = tree.getroot()
  23.  
  24. for image_size in root.findall('size'):
  25. imgwidth = int(image_size.find('width').text) #读取图像宽度
  26. imgheight = int(image_size.find('height').text) #读取图像高度
  27.  
  28. image_size.find('width').text = str(imgwidth)
  29. image_size.find('height').text = str(imgheight)
  30.  
  31. image_name =filename.split('.xml')
  32. imgpath = image_dir + image_name[0] + '.jpg'
  33. img = cv2.imread(imgpath)
  34. if not img.data:
  35. break
  36.  
  37. maxl = max(imgheight, imgwidth) #图片size是maxl*maxl
  38. paddingleft = (maxl - imgwidth) >> 1
  39. paddingright = (maxl - imgwidth) >> 1
  40. paddingbottom = (maxl - imgheight) >> 1
  41. paddingtop = (maxl - imgheight) >> 1
  42. saveimg = cv2.copyMakeBorder(img, paddingtop, paddingbottom, paddingleft, paddingright, cv2.BORDER_CONSTANT,value=0)
  43. cv2.imwrite(new_img_dir + image_name[0] + '.jpg', saveimg)
  44.  
  45. for image_size in root.findall('size'):
  46. image_size.find('width').text = str(maxl)
  47. image_size.find('height').text = str(maxl)
  48.  
  49. for object in root.findall('object'):
  50. name = str(object.find('name').text) #标注对象名
  51. v_bndbox = object.find('bndbox') #目标框位置
  52. x1 = int(v_bndbox.find('xmin').text)
  53. y1 = int(v_bndbox.find('ymin').text)
  54. x2 = int(v_bndbox.find('xmax').text)
  55. y2 = int(v_bndbox.find('ymax').text)
  56.  
  57. x11 = x1 + paddingleft
  58. y11 = y1 + paddingtop
  59. x22 = x11 + (x2-x1+1)
  60. y22 = y11 + (y2-y1+1)
  61.  
  62. v_bndbox.find('xmin').text = str(x11)
  63. v_bndbox.find('ymin').text = str(y11)
  64. v_bndbox.find('xmax').text = str(x22)
  65. v_bndbox.find('ymax').text = str(y22)
  66.  
  67. print(filename)
  68. 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. BIOS 中断向量表

    中断 描述 INT 00h CPU:除零错,或商不合法时触发 INT 01h CPU:单步陷阱,TF标记为打开状态时,每条指令执行后触发 INT 02h CPU:非可屏蔽中断,如引导自我测试时发生内存 ...

  2. luogu P1003 铺地毯

    水题 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; t ...

  3. 【数据结构】算法 LinkList (Add Two Numbers)

    两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. Solution:建立一个新链表C,然 ...

  4. html5 css折叠导航栏

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. LR12集合点设置和多个负载生成器策略

    今天给大家分享几个有关LR12的Controller使用过程中的几个常用问题: 一,脚本中添加集合点函数---lr_rendezvous 1,在被测接口事物函数之前加入集合点函数--lr_rendez ...

  6. maven中target不能访问

    原因是maven  clean的时候已经把target文件夹删除  但是文件夹还存在页面中  所以我们看得到但是不能打开.正常操作是获得管理员权限删除后再重新clean,但是我电脑有360,直接360 ...

  7. JQuery 中$("input:eq(0)") eq 的意思

    :eq(index)匹配一个给定索引值的元素 ----------------------------------------------------- Matches a single elemen ...

  8. nginx 环境不支持thinkPHP

    在linux+Nginx+mysql+PHP 新装的服务器下,不支持重写pathinfo功能 . 需要加入这个代码 让Nginx 支持重写功能 location / { if (!-e $reques ...

  9. 问题 1672: 迷宫问题 (BFS)

    题目链接:https://www.dotcpp.com/oj/problem1672.html 问题 1672: 迷宫问题 时间限制: 1Sec 内存限制: 32MB 提交: 663 解决: 158 ...

  10. 遍历table明细是否为空

    //循环遍历 <tbody id="linedata2">,获取每行值对比 $("#linedata2 tr").each(function(i,n ...