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解析XML的几种方式
Feb 16 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
python实现转圈打印矩阵
Mar 02 Python
详解python多线程之间的同步(一)
Apr 03 Python
python调用其他文件函数或类的示例
Jul 16 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Python基础之元编程知识总结
May 23 Python
Python作用域和名称空间的详细介绍
Apr 13 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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
javascript中的继承实例代码
2011/04/27 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
JS表的模拟方法
2015/02/05 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
Python中暂存上传图片的方法
2015/02/18 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
Keras设置以及获取权重的实现
2020/06/19 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
优质的学校老师推荐信
2013/10/28 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
小学生倡议书范文
2014/05/13 职场文书
党员自我剖析材料
2014/08/31 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
安全员岗位职责
2015/02/10 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书