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中return语句用法实例分析
Aug 04 Python
python中zip()方法应用实例分析
Apr 16 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
解决keras backend 越跑越慢问题
Jun 18 Python
python dir函数快速掌握用法技巧
Dec 09 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
php中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
vue实现登录功能
2020/12/31 Vue.js
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
python能做哪些生活有趣的事情
2020/09/09 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
会计电算化个人自我评价
2013/11/17 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
社区敬老月活动总结
2015/05/07 职场文书
演讲开场白和结束语
2015/05/29 职场文书
国情备忘录观后感
2015/06/04 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL