最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python讀取VOC中的xml目標(biāo)框?qū)嵗?/h1>
 更新時(shí)間:2020年03月10日 10:06:50   作者:Peanut_范  
這篇文章主要介紹了Python讀取VOC中的xml目標(biāo)框?qū)嵗?,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

代碼:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# get annotation object bndbox location
import os
import cv2
try:
  import xml.etree.cElementTree as ET #解析xml的c語(yǔ)言版的模塊
except ImportError:
  import xml.etree.ElementTree as ET
											     
##get object annotation bndbox loc start 
def GetAnnotBoxLoc(AnotPath):#AnotPath VOC標(biāo)注文件路徑
  tree = ET.ElementTree(file=AnotPath) #打開文件,解析成一棵樹型結(jié)構(gòu)
  root = tree.getroot()#獲取樹型結(jié)構(gòu)的根
  ObjectSet=root.findall('object')#找到文件中所有含有object關(guān)鍵字的地方,這些地方含有標(biāo)注目標(biāo)
  ObjBndBoxSet={} #以目標(biāo)類別為關(guān)鍵字,目標(biāo)框?yàn)橹到M成的字典結(jié)構(gòu)
  for Object in ObjectSet:
    ObjName=Object.find('name').text
    BndBox=Object.find('bndbox')
    x1 = int(BndBox.find('xmin').text)#-1 #-1是因?yàn)槌绦蚴前?作為起始位置的
    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)#如果字典結(jié)構(gòu)中含有這個(gè)類別了,那么這個(gè)目標(biāo)框要追加到其值的末尾
    else:
    	ObjBndBoxSet[ObjName]=[BndBoxLoc]#如果字典結(jié)構(gòu)中沒(méi)有這個(gè)類別,那么這個(gè)目標(biāo)框就直接賦值給其值吧
  return ObjBndBoxSet
##get object annotation bndbox loc end

def 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)

輸出結(jié)果:

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

圖示:

補(bǔ)充知識(shí):使用python將voc類型標(biāo)注xml文件對(duì)圖片進(jìn)行目標(biāo)還原,以及批量裁剪特定類

使用標(biāo)注工具如labelimg對(duì)圖片物體進(jìn)行voc類型標(biāo)注,會(huì)生成xml文件,如何判斷別人的數(shù)據(jù)集做的好不好,可以用以下代碼進(jìn)行目標(biāo)還原。

import xml.etree.cElementTree as ET
import cv2
import os
import glob

def 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 ObjBndBoxSet

def GetAnnotName(AnotPath):
  tree = ET.ElementTree(file=AnotPath) 
  root = tree.getroot()
  path=root.find('path').text
  return path

def 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) #blue
        if classes == "bad2":
          cv2.rectangle(img,(int(boxes[0]),int(boxes[1])),(int(boxes[2]),int(boxes[3])),(0,255,0),3) #green
        if 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對(duì)圖像進(jìn)行標(biāo)注,folder目錄需要修改一下

import xml.etree.ElementTree as ET
import os

for 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-8
import xml.dom.minidom
import cv2
import os

for 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目標(biāo)框?qū)嵗褪切【幏窒斫o大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 讀入多行數(shù)據(jù)的實(shí)例

    python 讀入多行數(shù)據(jù)的實(shí)例

    下面小編就為大家分享一篇python 讀入多行數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python 實(shí)現(xiàn)圖像快速替換某種顏色

    python 實(shí)現(xiàn)圖像快速替換某種顏色

    這篇文章主要介紹了python 實(shí)現(xiàn)圖像快速替換某種顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Anaconda入門使用總結(jié)

    Anaconda入門使用總結(jié)

    個(gè)人嘗試了很多類似的發(fā)行版,最終選擇了Anaconda,因?yàn)槠鋸?qiáng)大而方便的包管理與環(huán)境管理的功能。該文主要介紹下Anaconda,對(duì)Anaconda的理解,并簡(jiǎn)要總結(jié)下相關(guān)的操作
    2018-04-04
  • Python讀取Excel批量寫入到PPT并生成詞卡

    Python讀取Excel批量寫入到PPT并生成詞卡

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)讀取Excel并批量寫入到PPT生成詞卡,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-12-12
  • Python range、enumerate和zip函數(shù)用法詳解

    Python range、enumerate和zip函數(shù)用法詳解

    這篇文章主要介紹了Python range、enumerate和zip函數(shù)用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 使用Python實(shí)現(xiàn)在Word中添加或刪除超鏈接

    使用Python實(shí)現(xiàn)在Word中添加或刪除超鏈接

    在Word文檔中,超鏈接是一種將文本或圖像連接到其他文檔、網(wǎng)頁(yè)或同一文檔中不同部分的功能,本文將為大家介紹一下Python如何實(shí)現(xiàn)在Word中添加或刪除超鏈接,需要的可以參考下
    2025-01-01
  • Django Xadmin多對(duì)多字段過(guò)濾實(shí)例

    Django Xadmin多對(duì)多字段過(guò)濾實(shí)例

    這篇文章主要介紹了Django Xadmin多對(duì)多字段過(guò)濾實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python+Opencv實(shí)現(xiàn)圖像模板匹配詳解

    Python+Opencv實(shí)現(xiàn)圖像模板匹配詳解

    模板匹配可以看作是對(duì)象檢測(cè)的一種非常基本的形式。使用模板匹配,我們可以使用包含要檢測(cè)對(duì)象的“模板”來(lái)檢測(cè)輸入圖像中的對(duì)象。本文為大家介紹了圖像模板匹配的實(shí)現(xiàn)方法,需要的可以參考一下
    2022-09-09
  • python日志模塊loguru詳解

    python日志模塊loguru詳解

    大家好,本篇文章主要講的是python日志模塊loguru詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 手把手教你安裝Windows版本的Tensorflow

    手把手教你安裝Windows版本的Tensorflow

    這篇文章主要介紹了手把手教你安裝Windows版本的Tensorflow,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論

禄丰县| 屯留县| 井冈山市| 津南区| 曲麻莱县| 荣昌县| 泰兴市| 浙江省| 象州县| 太和县| 中西区| 南京市| 迭部县| 静安区| 建瓯市| 崇州市| 绥江县| 长治市| 铜鼓县| 定远县| 绩溪县| 大连市| 徐水县| 望奎县| 台南县| 安新县| 威远县| 博兴县| 平乐县| 江油市| 永仁县| 龙泉市| 江山市| 都昌县| 枞阳县| 迁安市| 马边| 孝义市| 香格里拉县| 海宁市| 固镇县|