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实现Const详解
Jan 27 Python
Python 装饰器深入理解
Mar 16 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
python调用支付宝支付接口流程
Aug 15 Python
Pandas 缺失数据处理的实现
Nov 04 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 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
mysql5写入和读出乱码解决
2006/11/25 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
Python splitlines使用技巧
2008/09/06 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python之Class&Object用法详解
2019/12/25 Python
Python中logging日志库实例详解
2020/02/19 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
质量主管工作职责
2014/09/26 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
介绍信的格式
2015/01/30 职场文书
支教个人总结
2015/03/04 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书