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实现在目录中查找指定文件的方法
Nov 11 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
详解python中list的使用
Mar 15 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
用Python解数独的方法示例
Oct 24 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
零基础小白多久能学会python
Jun 22 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
pytorch Dropout过拟合的操作
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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP 写文本日志实现代码
2010/05/18 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
js资料prototype 属性
2007/03/13 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
毕业求职自荐信格式是什么
2013/11/19 职场文书
安全协议书范本
2014/04/21 职场文书
活动总结怎么写
2014/04/28 职场文书
社区工作者演讲稿
2014/05/23 职场文书
企业法人代表证明书
2014/09/27 职场文书
教师节寄语2015
2015/03/23 职场文书
费用申请报告范文
2015/05/15 职场文书
合作意向书范本
2019/04/17 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python