python 截取XML中bndbox的坐标中的图像,另存为jpg的实例


Posted in Python onMarch 10, 2020

文件目录

Annotations中是XML文件。

JPEGImages中是对应的JPG文件

python 截取XML中bndbox的坐标中的图像,另存为jpg的实例

XML文件

python 截取XML中bndbox的坐标中的图像,另存为jpg的实例

要截取bndbox坐标中的内容。

python代码

# -*- coding: utf-8 -*-
# @Time  : 2020/2/8 22:14
# @Author : SanZhi
# @File  : get_xml.py
# @Software: PyCharm
import cv2
import numpy as np

import xml.dom.minidom
import os
import argparse

def main():
  # JPG文件的地址
  img_path = 'D:/ser/JPEGImages/'
  # XML文件的地址
  anno_path = 'D:/ser/Annotations/'
  # 存结果的文件夹
  cut_path = 'D:/ser/cut/'
  # 获取文件夹中的文件
  imagelist = os.listdir(img_path)

  for image in imagelist:
    image_pre, ext = os.path.splitext(image)
    img_file = img_path + image
    img = cv2.imread(img_file)
    xml_file = anno_path + image_pre + '.xml'
    DOMTree = xml.dom.minidom.parse(xml_file)
    collection = DOMTree.documentElement
    objects = collection.getElementsByTagName("object")

    for object in objects:
      print("start")
      bndbox = object.getElementsByTagName('bndbox')[0]
      xmin = bndbox.getElementsByTagName('xmin')[0]
      xmin_data = xmin.childNodes[0].data
      ymin = bndbox.getElementsByTagName('ymin')[0]
      ymin_data = ymin.childNodes[0].data
      xmax = bndbox.getElementsByTagName('xmax')[0]
      xmax_data = xmax.childNodes[0].data
      ymax = bndbox.getElementsByTagName('ymax')[0]
      ymax_data = ymax.childNodes[0].data
      xmin = int(xmin_data)
      xmax = int(xmax_data)
      ymin = int(ymin_data)
      ymax = int(ymax_data)
      img_cut = img[ymin:ymax, xmin:xmax, :]
      cv2.imwrite(cut_path + 'cut_img_{}.jpg'.format(image_pre), img_cut)


if __name__ == '__main__':
  main()

补充知识:python读取XML中bndbox和object name的方法

直接贴代码了,封装为了函数,直接调用即可。其中有几个点需要注意。

1、bndbox下面有4个子对象,因此不能直接使用firstChild来找到内容,需要从该对象里面继续寻找标签为xmin等这样的对象,注意要加[0]才正确,有问题的可以直接调试,然后看变量的结构,根据变量的结构来调用某一对象。

2、将空格' '替换为'_',方便命名。但是使用str.replace(' ', '_')不会直接改变str的内容,返回的字符串是改变后的,因此需要变量保存。

import xml.dom.minidom as xmldom
def get_bndboxfromxml(imageNum, xmlfilebasepath):
  # 读取xml文件
  bndbox = [0, 0, 0, 0]
  xmlfilepath = xmlfilebasepath + "\%06d" % imageNum+'.xml'
  # print(xmlfilepath)
  domobj = xmldom.parse(xmlfilepath)
  elementobj = domobj.documentElement
  sub_element_obj = elementobj.getElementsByTagName('bndbox')
  if sub_element_obj is not None:
    bndbox[0] = int(sub_element_obj[0].getElementsByTagName('xmin')[0].firstChild.data)
    bndbox[1] = int(sub_element_obj[0].getElementsByTagName('ymin')[0].firstChild.data)
    bndbox[2] = int(sub_element_obj[0].getElementsByTagName('xmax')[0].firstChild.data)
    bndbox[3] = int(sub_element_obj[0].getElementsByTagName('ymax')[0].firstChild.data)
  return bndbox


def get_bndboxnamefromxml(imageNum, xmlfilebasepath):
  bndbox = [0, 0, 0, 0]
  xmlfilepath = xmlfilebasepath + "\%06d" % imageNum + '.xml'
  domobj = xmldom.parse(xmlfilepath)
  elementobj = domobj.documentElement
  sub_element_obj = elementobj.getElementsByTagName('name')
  name = sub_element_obj[0].firstChild.data.replace(' ', '_')

  return name

以上这篇python 截取XML中bndbox的坐标中的图像,另存为jpg的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python数据结构之二叉树的遍历实例
Apr 29 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python解释器spython使用及原理解析
Aug 24 Python
pytest中文文档之编写断言
Sep 12 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Python中的引用和拷贝实例解析
Nov 14 Python
Python telnet登陆功能实现代码
Apr 16 Python
Python中无限循环需要什么条件
May 27 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 #Python
Python读取VOC中的xml目标框实例
Mar 10 #Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 #Python
python代码xml转txt实例
Mar 10 #Python
Python切割图片成九宫格的示例代码
Mar 10 #Python
pycharm设置python文件模板信息过程图解
Mar 10 #Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 #Python
You might like
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
vue--vuex详解
2019/04/15 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
Vuex的热更替如何实现
2020/06/05 Javascript
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
django 外键创建注意事项说明
2020/05/20 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
SQL面试题
2013/12/09 面试题
房地产出纳岗位职责
2013/12/01 职场文书
网页美工求职信范文
2014/04/17 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
法律顾问服务方案
2014/05/15 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
交通事故协议书范本
2014/11/18 职场文书
婚宴领导致辞
2015/07/28 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书