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实现抓取城市的PM2.5浓度和排名
Mar 19 Python
Python删除windows垃圾文件的方法
Jul 14 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
python字典DICT类型合并详解
Aug 17 Python
Python语言生成水仙花数代码示例
Dec 18 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
基于python指定包的安装路径方法
Oct 27 Python
Python定时器线程池原理详解
Feb 26 Python
Python函数基本使用原理详解
Mar 19 Python
浅谈python锁与死锁问题
Aug 14 Python
python+playwright微软自动化工具的使用
Feb 02 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 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脚本数据库功能详解(下)
2006/10/09 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
python Django批量导入不重复数据
2016/03/25 Python
详解Python IO口多路复用
2020/06/17 Python
Python基于locals返回作用域字典
2020/10/17 Python
python实现ping命令小程序
2020/12/28 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
会计工作决心书
2014/03/11 职场文书
心理咨询承诺书
2014/05/20 职场文书
机关作风建设自查报告
2014/10/22 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL
拙作再改《我的收音机情缘》
2022/04/05 无线电
Python经常使用的一些内置函数
2022/04/11 Python