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读写ini文件示例(python读写文件)
Mar 25 Python
python实现html转ubb代码(html2ubb)
Jul 03 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python切换pip安装源的方法详解
Nov 18 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
详解python 注释、变量、类型
Aug 10 Python
使用python对excle和json互相转换的示例
Oct 23 Python
Python遍历字典方式就实例详解
Dec 28 Python
Python 如何查找特定类型文件
Aug 17 Python
python爬虫调度器用法及实例代码
Nov 30 Python
python实战之90行代码写个猜数字游戏
Apr 22 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
php表单提交问题的解决方法
2011/04/12 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
javascript中神奇的 Date对象小结
2017/10/12 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
水果连锁超市创业计划书
2014/01/24 职场文书
财务务虚会发言材料
2014/10/20 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
党员读书活动心得体会
2016/01/14 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
python playwright之元素定位示例详解
2022/07/23 Python