帝王谷资源网 Design By www.wdxyy.com
文件目录
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 www.wdxyy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
帝王谷资源网 Design By www.wdxyy.com
暂无评论...
更新日志
2024年10月25日
2024年10月25日
- 群星2013-青春缤纷辑压箱宝大公开3CD2[新加坡限量版][WAV整轨]
- 林育群.2013-BalladShow(日本版)【环球】【WAV+CUE】
- 陈加洛.1992-痛到感觉不到【宝丽金】【WAV+CUE】
- 群星.2023-宿命之敌电视剧原声带【韶愔音乐】【FLAC分轨】
- 東京事変-大発見[FLAC+CUE]
- 椎名林檎-三文ゴシップ[FLAC+CUE]
- 2024年08月04日
- 裘德《裘德「最后的水族馆」演唱会LIVE》[320K/MP3][228.89MB]
- 裘德《裘德「最后的水族馆」演唱会LIVE》[24bit 48kHz][FLAC/分轨][2.08G]
- 基因三重奏《如果你什么都不说 音乐会现场录音》[320K/MP3][145.37MB]
- 孟庭苇.1996-月亮说话(2020环球24KGOLD限量版)【上华】【WAV+CUE】
- 群星.1997-新艺宝优质音响系列·国语精选监听版【新艺宝】【WAV+CUE】
- 阿桑.2005-寂寞在唱歌(星外星引进版)【华研国际】【WAV+CUE】
- 基因三重奏《如果你什么都不说 音乐会现场录音》[FLAC/分轨][287.43MB]
- 蔡题谦《我爱你,却依然要看你走》[320K/MP3][88.65MB]