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使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
Django中信号signals的简单使用方法
Jul 04 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
在Python 的线程中运行协程的方法
Feb 24 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
python导入库的具体方法
Jun 18 Python
python代码能做成软件吗
Jul 24 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
python之json文件转xml文件案例讲解
Aug 07 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
对numpy中shape的深入理解
2018/06/15 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
入党自我评价优缺点
2014/01/25 职场文书
《学会合作》教学反思
2014/04/12 职场文书
勾股定理课后反思
2014/04/26 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
mysql函数全面总结
2021/11/11 MySQL
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android