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中的面向对象编程的概念
Apr 27 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
微信跳一跳python代码实现
Jan 05 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
如何在Django项目中引入静态文件
Jul 26 Python
Python Django 命名空间模式的实现
Aug 09 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
Django与pyecharts结合的实例代码
May 13 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
pytorch训练神经网络爆内存的解决方案
May 22 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面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
XENON基于JSON变种
2010/07/27 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Django如何将URL映射到视图
2019/07/29 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Python 多进程、多线程效率对比
2020/11/19 Python
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
公司门卫工作职责
2014/06/28 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
导游词之天津盘山
2019/11/01 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
Java实现聊天机器人完善版
2021/07/04 Java/Android
分享7个 Python 实战项目练习
2022/03/03 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫