Python 读取xml数据,cv2裁剪图片实例


Posted in Python onMarch 10, 2020

下载的数据是pascal voc2012的数据,已经有annotation了,不过是xml格式的,训练的模型是在Google模型的基础上加了两层网络,因此要在原始图像中裁剪出用于训练的部分图像。

另外,在原来给的标注框的基础上,做了点框的移动。最后同类目标存储在同一文件夹中。

from __future__ import division
import os
from PIL import Image
import xml.dom.minidom
import numpy as np
 
ImgPath = 'C:/Users/Desktop/XML_try/img/' 
AnnoPath = 'C:/Users/Desktop/XML_try/xml/'
ProcessedPath = 'C:/Users/Desktop/CropedVOC/'
 
imagelist = os.listdir(ImgPath)
for image in imagelist:
	image_pre, ext = os.path.splitext(image)
	imgfile = ImgPath + image 
	xmlfile = AnnoPath + image_pre + '.xml'
	
	DomTree = xml.dom.minidom.parse(xmlfile)
	annotation = DomTree.documentElement
 
	filenamelist = annotation.getElementsByTagName('filename') #[<DOM Element: filename at 0x381f788>]
	filename = filenamelist[0].childNodes[0].data
	objectlist = annotation.getElementsByTagName('object')
	
	i = 1
	for objects in objectlist:
		
		namelist = objects.getElementsByTagName('name')
		objectname = namelist[0].childNodes[0].data
 
		savepath = ProcessedPath + objectname
 
		if not os.path.exists(savepath):
			os.makedirs(savepath)
 
		bndbox = objects.getElementsByTagName('bndbox')
		cropboxes = []
 
		for box in bndbox:
			x1_list = box.getElementsByTagName('xmin')
			x1 = int(x1_list[0].childNodes[0].data)
			y1_list = box.getElementsByTagName('ymin')
			y1 = int(y1_list[0].childNodes[0].data)
			x2_list = box.getElementsByTagName('xmax')
			x2 = int(x2_list[0].childNodes[0].data)
			y2_list = box.getElementsByTagName('ymax')
			y2 = int(y2_list[0].childNodes[0].data)
 
			w = x2 - x1
			h = y2 - y1
 
			obj = np.array([x1,y1,x2,y2])
			shift = np.array([[0.8,0.8,1.2,1.2],[0.9,0.9,1.1,1.1],[1,1,1,1],[0.7,0.7,1,1],[1,1,1.2,1.2],\
				[0.7,1,1,1.2],[1,0.7,1.2,1],[(x1+w*1/3)/x1,(y1+h*1/3)/y1,(x2+w*1/3)/x2,(y2+h*1/3)/y2],\
				[(x1-w*1/3)/x1,(y1-h*1/3)/y1,(x2-w*1/3)/x2,(y2-h*1/3)/y2]])
 
			XYmatrix = np.tile(obj,(9,1)) 
			cropboxes = XYmatrix * shift
 
			img = Image.open(imgfile)
			for cropbox in cropboxes:
				cropedimg = img.crop(cropbox)
				cropedimg.save(savepath + '/' + image_pre + '_' + str(i) + '.jpg')
				i += 1

补充知识:python-----截取xml文件画框的图片并保存

from __future__ import division
import os
from PIL import Image
import xml.dom.minidom
import numpy as np
ImgPath = r'D:\tmp\video_wang_mod\01\00022_8253_0021_3\output/'
AnnoPath = r'D:\tmp\video_wang_mod\01\00022_8253_0021_3\Annotations/'
ProcessedPath = r'D:\tmp\video_wang_mod\01\00022_8253_0021_3\cut/'

imagelist = os.listdir(ImgPath)

for image in imagelist:
  image_pre, ext = os.path.splitext(image)
  imgfile = ImgPath + image
  print(imgfile)
  if not os.path.exists(AnnoPath + image_pre + '.xml' ):
    continue
  xmlfile = AnnoPath + image_pre + '.xml'
  DomTree = xml.dom.minidom.parse(xmlfile)
  annotation = DomTree.documentElement
  filenamelist = annotation.getElementsByTagName('filename')
  filename = filenamelist[0].childNodes[0].data
  objectlist = annotation.getElementsByTagName('object')
  i = 1
  for objects in objectlist:
    namelist = objects.getElementsByTagName('name')
    objectname = namelist[0].childNodes[0].data
    savepath = ProcessedPath + objectname
    if not os.path.exists(savepath):
      os.makedirs(savepath)
    bndbox = objects.getElementsByTagName('bndbox')
    cropboxes = []
    for box in bndbox:
      x1_list = box.getElementsByTagName('xmin')
      x1 = int(x1_list[0].childNodes[0].data)
      y1_list = box.getElementsByTagName('ymin')
      y1 = int(y1_list[0].childNodes[0].data)
      x2_list = box.getElementsByTagName('xmax')
      x2 = int(x2_list[0].childNodes[0].data)
      y2_list = box.getElementsByTagName('ymax')
      y2 = int(y2_list[0].childNodes[0].data)
      w = x2 - x1
      h = y2 - y1
      obj = np.array([x1,y1,x2,y2])
      shift = np.array([[1,1,1,1]])
      XYmatrix = np.tile(obj,(1,1))
      cropboxes = XYmatrix * shift
      img = Image.open(imgfile)
      for cropbox in cropboxes:
        cropedimg = img.crop(cropbox)
        cropedimg.save(savepath + '/' + image_pre + '_' + str(i) + '.jpg')
        i += 1

以上这篇Python 读取xml数据,cv2裁剪图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
python文件写入实例分析
Apr 08 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
Python代码缩进和测试模块示例详解
May 07 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Django框架获取form表单数据方式总结
Apr 22 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
python 网络编程要点总结
Jun 18 Python
Elasticsearch 批量操作
Apr 19 Python
python代码xml转txt实例
Mar 10 #Python
Python切割图片成九宫格的示例代码
Mar 10 #Python
pycharm设置python文件模板信息过程图解
Mar 10 #Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 #Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 #Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 #Python
python标准库OS模块详解
Mar 10 #Python
You might like
用PHP查询域名状态whois的类
2006/11/25 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
python开发之str.format()用法实例分析
2016/02/22 Python
Python语言的变量认识及操作方法
2018/02/11 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
机电专业个人自荐信格式模板
2013/09/23 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
公司业务员岗位职责
2014/03/18 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
建议书范文
2015/02/05 职场文书
应聘教师自荐信
2015/03/26 职场文书
篮球拉拉队口号
2015/12/25 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js