南强小屋 Design By 杰米
文件目录
Annotations中是XML文件。
JPEGImages中是对应的JPG文件
XML文件
要截取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的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无python 截取XML中bndbox的坐标中的图像,另存为jpg的实例的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?

