日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python讀取VOC中的xml目標框實例

瀏覽:31日期:2022-08-03 08:34:03

代碼:

#!/usr/bin/python# -*- coding: UTF-8 -*-# get annotation object bndbox locationimport osimport cv2try: import xml.etree.cElementTree as ET #解析xml的c語言版的模塊except ImportError: import xml.etree.ElementTree as ET ##get object annotation bndbox loc start def GetAnnotBoxLoc(AnotPath):#AnotPath VOC標注文件路徑 tree = ET.ElementTree(file=AnotPath) #打開文件,解析成一棵樹型結構 root = tree.getroot()#獲取樹型結構的根 ObjectSet=root.findall(’object’)#找到文件中所有含有object關鍵字的地方,這些地方含有標注目標 ObjBndBoxSet={} #以目標類別為關鍵字,目標框為值組成的字典結構 for Object in ObjectSet: ObjName=Object.find(’name’).text BndBox=Object.find(’bndbox’) x1 = int(BndBox.find(’xmin’).text)#-1 #-1是因為程序是按0作為起始位置的 y1 = int(BndBox.find(’ymin’).text)#-1 x2 = int(BndBox.find(’xmax’).text)#-1 y2 = int(BndBox.find(’ymax’).text)#-1 BndBoxLoc=[x1,y1,x2,y2] if ObjName in ObjBndBoxSet: ObjBndBoxSet[ObjName].append(BndBoxLoc)#如果字典結構中含有這個類別了,那么這個目標框要追加到其值的末尾 else: ObjBndBoxSet[ObjName]=[BndBoxLoc]#如果字典結構中沒有這個類別,那么這個目標框就直接賦值給其值吧 return ObjBndBoxSet##get object annotation bndbox loc enddef display(objBox,pic): img = cv2.imread(pic) for key in objBox.keys(): for i in range(len(objBox[key])): cv2.rectangle(img, (objBox[key][i][0],objBox[key][i][1]), (objBox[key][i][2], objBox[key][i][3]), (0, 0, 255), 2) cv2.putText(img, key, (objBox[key][i][0],objBox[key][i][1]), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1) cv2.imshow(’img’,img) cv2.imwrite(’display.jpg’,img) cv2.waitKey(0)if __name__== ’__main__’: pic = r'./VOCdevkit/VOC2007/JPEGImages/000282.jpg' ObjBndBoxSet=GetAnnotBoxLoc(r'./VOCdevkit/VOC2007/Annotations/000282.xml') print(ObjBndBoxSet) display(ObjBndBoxSet,pic)

輸出結果:

{’chair’: [[335, 263, 484, 373]], ’person’: [[327, 104, 476, 300], [232, 57, 357, 374], [3, 32, 199, 374], [58, 139, 296, 374]]}

圖示:

Python讀取VOC中的xml目標框實例

補充知識:使用python將voc類型標注xml文件對圖片進行目標還原,以及批量裁剪特定類

使用標注工具如labelimg對圖片物體進行voc類型標注,會生成xml文件,如何判斷別人的數據集做的好不好,可以用以下代碼進行目標還原。

import xml.etree.cElementTree as ETimport cv2import osimport globdef GetAnnotBoxLoc(AnotPath): tree = ET.ElementTree(file=AnotPath) root = tree.getroot() ObjectSet=root.findall(’object’) ObjBndBoxSet={} for Object in ObjectSet: ObjName=Object.find(’name’).text BndBox=Object.find(’bndbox’) x1 = int(BndBox.find(’xmin’).text) y1 = int(BndBox.find(’ymin’).text) x2 = int(BndBox.find(’xmax’).text) y2 = int(BndBox.find(’ymax’).text) BndBoxLoc=[x1,y1,x2,y2] if ObjName in ObjBndBoxSet: ObjBndBoxSet[ObjName].append(BndBoxLoc) else: ObjBndBoxSet[ObjName]=[BndBoxLoc] return ObjBndBoxSetdef GetAnnotName(AnotPath): tree = ET.ElementTree(file=AnotPath) root = tree.getroot() path=root.find(’path’).text return pathdef Drawpic(xml_path,result_path): n = 0 xmls = glob.glob(os.path.join(xml_path, ’*.xml’)) for xml in xmls: n = n + 1 box=GetAnnotBoxLoc(xml) path=GetAnnotName(xml) img = cv2.imread(path) for classes in list(box.keys()): for boxes in box[classes]:if classes == 'bad1': cv2.rectangle(img,(int(boxes[0]),int(boxes[1])),(int(boxes[2]),int(boxes[3])),(255,0,0),3) #blueif classes == 'bad2': cv2.rectangle(img,(int(boxes[0]),int(boxes[1])),(int(boxes[2]),int(boxes[3])),(0,255,0),3) #greenif classes == 'bad3': cv2.rectangle(img,(int(boxes[0]),int(boxes[1])),(int(boxes[2]),int(boxes[3])),(0,0,255),3) #red cv2.imwrite(result_path+'/'+str(n)+'_result.jpg', img) print(path,'還原成功')Drawpic('/home/wxy/Dashboard/dataset/VOCdevkit/VOC2012/Annotations','/home/wxy/Dashboard/dataset/VOCdevkit/VOC2012/test')

使用labelimg對圖像進行標注,folder目錄需要修改一下

import xml.etree.ElementTree as ETimport osfor i in os.listdir(’/home/wxy/Dashboard/dataset/VOCdevkit/VOC2012/Annotations’): tree = ET.parse(’/home/wxy/Dashboard/dataset/VOCdevkit/VOC2012/Annotations’+’/’+i) root = tree.getroot() print(root.find(’folder’).text) root.find(’folder’).text = ’VOC2012’ print(root.find(’folder’).text) tree.write(’/home/wxy/Dashboard/dataset/VOCdevkit/VOC2012/Annotations’+’/’+i)

批量裁剪特定類,xml.dom.minidom好像比xml.etree.cElementTree好用啊。

#coding=utf-8import xml.dom.minidomimport cv2import osfor name in os.listdir('./Annotations/'): dom=xml.dom.minidom.parse('./Annotations/'+name) root=dom.documentElement object_name=root.getElementsByTagName(’name’) if(object_name[0].firstChild.data == 'normal'): print(name) xmin=root.getElementsByTagName(’xmin’) ymin=root.getElementsByTagName(’ymin’) xmax=root.getElementsByTagName(’xmax’) ymax=root.getElementsByTagName(’ymax’) x_min = int(xmin[0].firstChild.data) y_min = int(ymin[0].firstChild.data) x_max = int(xmax[0].firstChild.data) y_max = int(ymax[0].firstChild.data) img=cv2.imread('./JPEGImages/'+name[:-4]+'.jpg') cropped=img[y_min:y_max,x_min:x_max] cv2.imwrite('./cut_jpg/'+name[:-4]+'.jpg', cropped)

以上這篇Python讀取VOC中的xml目標框實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品免费一区二区夜夜嗨 | 精品免费av在线| 日本成人中文字幕在线视频| 亚洲一二av| 亚洲欧美日本国产| 日韩免费精品| 国产精品探花在线观看| 国产精品毛片视频| 精品三级av在线导航| 久久精品国产久精国产| 久久精品亚洲| 欧洲亚洲一区二区三区| 成人自拍av| 欧美久久精品一级c片| 亚洲国产一区二区三区在线播放| 好看不卡的中文字幕| 性一交一乱一区二区洋洋av| 男人操女人的视频在线观看欧美| 蜜桃视频在线观看一区| 日韩avvvv在线播放| 国产日韩高清一区二区三区在线| 国产精品乱战久久久| jizzjizz中国精品麻豆| 久久天堂精品| 天堂av在线一区| 亚洲人成网77777色在线播放 | 亚洲精品麻豆| 国产乱码精品一区二区三区亚洲人| 国产精品大片| 欧美日韩视频网站| 久久人人97超碰国产公开结果| jiujiure精品视频播放| 视频一区视频二区中文| 亚洲三级视频| 你懂的国产精品永久在线| 午夜影院一区| 亚洲精一区二区三区| 麻豆精品一区二区综合av| 特黄特色欧美大片| 亚洲天堂日韩在线| 久久这里只有| 99亚洲精品| 国产激情精品一区二区三区| 精品捆绑调教一区二区三区| 视频一区二区欧美| 国产伊人久久| 欧美久久精品一级c片| 久久狠狠亚洲综合| 欧美日韩色图| 国产欧美一区二区三区精品观看 | 亚洲激情二区| 国产精品久久久久久久久久白浆 | 精品亚洲自拍| 在线 亚洲欧美在线综合一区| 91精品在线免费视频| 欧美日韩精品免费观看视欧美高清免费大片 | 蜜臀久久久99精品久久久久久| 国产欧美日韩在线一区二区| 久久精品亚洲人成影院| 青草国产精品久久久久久| 亚洲日本网址| 日韩成人精品一区二区三区| 日韩欧美自拍| 久久国产尿小便嘘嘘| 91成人网在线观看| 久久精品国产精品亚洲毛片| 石原莉奈一区二区三区在线观看| 国产精品国产三级国产在线观看| 日韩精品一级中文字幕精品视频免费观看 | 日韩高清不卡| 久久国产免费看| 好吊日精品视频 | 老司机精品视频网| 天海翼亚洲一区二区三区| 成人看片网站| 久久国产精品色av免费看| 欧美日韩日本国产亚洲在线| 高潮久久久久久久久久久久久久| 亚州精品视频| 红桃视频国产一区| 丝袜诱惑一区二区| 国产精品亲子伦av一区二区三区| 视频一区视频二区在线观看| 999国产精品| 久久精品二区亚洲w码| 日韩精品1区2区3区| 免费日韩av| 亚洲激情欧美| 99久久亚洲精品蜜臀| 国产一区二区三区黄网站| 日韩**一区毛片| 免费国产亚洲视频| 欧美精品羞羞答答| 久久国产电影| 国产资源在线观看入口av| 欧美一区二区三区久久精品| 国产精品美女久久久| 亚洲成av在线| 91av亚洲| 国内不卡的一区二区三区中文字幕| 日韩激情av在线| 亚洲精品在线a| 亚洲综合三区| 国产婷婷精品| 亚洲高清二区| 99久久九九| 日韩在线欧美| 欧美一级鲁丝片| 欧美久久天堂| 粉嫩av一区二区三区四区五区 | 国产精品人人爽人人做我的可爱| 亚洲www啪成人一区二区| 成人在线免费观看网站| 久久免费影院| 国产毛片久久久| 日本欧美韩国一区三区| 亚洲九九精品| 日韩综合一区二区| 香蕉成人久久| 在线观看一区| 蜜臀精品一区二区三区在线观看| 亚洲精品网址| 米奇777超碰欧美日韩亚洲| 亚洲福利免费| 夜夜嗨网站十八久久| 免播放器亚洲| 亚洲开心激情| 久久狠狠亚洲综合| 欧美激情日韩| 久久成人av| 荡女精品导航| 波多视频一区| 国产精品av久久久久久麻豆网| 激情六月综合| 热久久免费视频| 日韩国产欧美在线播放| 日本午夜精品视频在线观看| 国产精品中文字幕亚洲欧美| 国产精品一线天粉嫩av| 国产精品红桃| 国产成人精品一区二区三区免费| 国产成人精品三级高清久久91 | 亚洲欧美日韩高清在线| 久久99伊人| 午夜亚洲福利| 亚洲免费一区三区| 久久国产三级精品| 精品国产一区二区三区av片| 日韩一区三区| 国产亚洲在线| 日韩精品高清不卡| 国产精品xxx在线观看| 国产成人免费| 999国产精品| 老司机精品久久| 国产精品午夜一区二区三区| 精品一区不卡| 日韩中文字幕高清在线观看| 欧美午夜不卡影院在线观看完整版免费| 一区二区国产在线观看| 国产精品永久| 麻豆精品蜜桃| 亚洲精品美女| 国产成人精品亚洲线观看| 美女网站一区| 日韩视频一二区| 国产不卡精品| 视频一区国产视频| 欧美激情网址| 精品欧美激情在线观看| 日韩精品一区二区三区中文在线| 麻豆一区二区在线| 人人精品亚洲| 日本欧美韩国一区三区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产精品不卡| 国产精品日本| 你懂的网址国产 欧美| 亚洲成人精选| 国产日产精品_国产精品毛片 | 人人精品亚洲| 午夜久久av| 国产精品国产一区| 美女精品网站| 丁香婷婷久久| 亚洲人成亚洲精品| 樱桃视频成人在线观看| 日韩中文字幕无砖| 国产一区二区三区亚洲综合| 国产亚洲永久域名| 成人午夜网址| 亚洲专区视频| 日韩免费福利视频| 欧美一区自拍| 精品欧美久久| 狠狠久久伊人| 亚洲精品高潮| 激情丁香综合| 国产成人精品亚洲线观看| 亚洲精品亚洲人成在线观看|