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学习笔记_数据排序方法
May 22 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
Python中format()格式输出全解
Apr 12 Python
在Python中COM口的调用方法
Jul 03 Python
python next()和iter()函数原理解析
Feb 07 Python
如何基于windows实现python定时爬虫
May 01 Python
Python更换pip源方法过程解析
May 19 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
介绍Python中的__future__模块
2015/04/27 Python
python冒泡排序简单实现方法
2015/07/09 Python
Python进程间通信之共享内存详解
2017/10/30 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
自强自立美德少年事迹材料
2014/08/16 职场文书
战友聚会致辞
2015/07/28 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js