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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python是编译运行的验证方法
Jan 30 Python
Python检测生僻字的实现方法
Oct 23 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python+django加载静态网页模板解析
Dec 12 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
python flask几分钟实现web服务的例子
Jul 26 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
Python语言中的数据类型-序列
Feb 24 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
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python运行DLL文件的方法
2020/01/17 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
开学典礼主持词
2014/03/19 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
华清池导游词
2015/02/02 职场文书
处罚决定书范文
2015/06/24 职场文书
python如何查找列表中元素的位置
2022/05/30 Python