python目標(biāo)檢測(cè)給圖畫(huà)框,bbox畫(huà)到圖上并保存案例
我就廢話不多說(shuō)了,還是直接上代碼吧!
import os import xml.dom.minidom import cv2 as cv ImgPath = 'C:/Users/49691/Desktop/gangjin/gangjin_test/JPEGImages/' AnnoPath = 'C:/Users/49691/Desktop/gangjin/gangjin_test/Annotations/' #xml文件地址 save_path = '' def draw_anchor(ImgPath,AnnoPath,save_path): imagelist = os.listdir(ImgPath) for image in imagelist: image_pre, ext = os.path.splitext(image) imgfile = ImgPath + image xmlfile = AnnoPath + image_pre + '.xml' # print(image) # 打開(kāi)xml文檔 DOMTree = xml.dom.minidom.parse(xmlfile) # 得到文檔元素對(duì)象 collection = DOMTree.documentElement # 讀取圖片 img = cv.imread(imgfile) filenamelist = collection.getElementsByTagName("filename") filename = filenamelist[0].childNodes[0].data print(filename) # 得到標(biāo)簽名為object的信息 objectlist = collection.getElementsByTagName("object") for objects in objectlist: # 每個(gè)object中得到子標(biāo)簽名為name的信息 namelist = objects.getElementsByTagName('name') # 通過(guò)此語(yǔ)句得到具體的某個(gè)name的值 objectname = namelist[0].childNodes[0].data bndbox = objects.getElementsByTagName('bndbox') # print(bndbox) for box in bndbox: x1_list = box.getElementsByTagName('xmin') x1 = int(x1_list[0].childNodes[0].data) y1_list = box.getElementsByTagName('ymin') y1 = int(y1_list[0].childNodes[0].data) x2_list = box.getElementsByTagName('xmax') #注意坐標(biāo),看是否需要轉(zhuǎn)換 x2 = int(x2_list[0].childNodes[0].data) y2_list = box.getElementsByTagName('ymax') y2 = int(y2_list[0].childNodes[0].data) cv.rectangle(img, (x1, y1), (x2, y2), (255, 255, 255), thickness=2) cv.putText(img, objectname, (x1, y1), cv.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0), thickness=2) # cv.imshow('head', img) cv.imwrite(save_path+'/'+filename, img) #save picture
補(bǔ)充知識(shí):深度學(xué)習(xí)python之用Faster-rcnn 檢測(cè)結(jié)果(txt文件) 在原圖畫(huà)出box
使用Faster-rcnn 的test_net.py 檢測(cè)網(wǎng)絡(luò)的mAP等精度會(huì)生成一個(gè)檢測(cè)結(jié)果(txt文件),格式如下:
000004 0.972 302.8 94.5 512.0 150.0 000004 0.950 348.1 166.1 512.0 242.9 000004 0.875 1.0 25.7 292.6 126.3 000004 0.730 1.0 138.5 488.3 230.0 000004 0.699 1.0 120.9 145.5 139.9 000004 0.592 54.4 227.4 431.9 343.4 000004 0.588 1.0 159.8 18.8 231.6 000004 0.126 1.0 247.1 342.3 270.0 000004 0.120 1.0 225.4 185.7 309.3
每行分別為 名稱(chēng) 檢測(cè)概率 xmin ymin xmax ymax
問(wèn)題在于每一行只顯示一個(gè)box數(shù)據(jù),每幅圖像可能包括多個(gè)box,需要判斷提取的多行數(shù)據(jù)是不是屬于同一圖片
下面使用python提取這些數(shù)據(jù),在原圖上畫(huà)出box并且保存起來(lái)
import os import os.path import numpy as np import xml.etree.ElementTree as xmlET from PIL import Image, ImageDraw import cPickle as pickle txt_name = 'comp4_8a226fd7-753d-40fc-8013-f68d2a465579_det_test_ship.txt' file_path_img = '/home/JPEGImages' save_file_path = '/home/detect_results' source_file = open(txt_name) img_names = [] for line in source_file: staff = line.split() img_name = staff[0] img_names.append(img_name) name_dict = {} for i in img_names: if img_names.count(i)>0: name_dict[i] = img_names.count(i) source_file.close() source_file = open(txt_name) for idx in name_dict: img = Image.open(os.path.join(file_path_img, idx + '.jpg')) draw = ImageDraw.Draw(img) for i in xrange(name_dict[idx]): line = source_file.readline() staff = line.split() score = staff[1] box = staff[2:6] draw.rectangle([int(np.round(float(box[0]))), int(np.round(float(box[1]))), int(np.round(float(box[2]))), int(np.round(float(box[3])))], outline=(255, 0, 0)) img.save(os.path.join(save_file_path, idx + '.jpg')) source_file.close()
運(yùn)行完即可在保存文件夾中得到效果圖。
以上這篇python目標(biāo)檢測(cè)給圖畫(huà)框,bbox畫(huà)到圖上并保存案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Python操作MongoDB數(shù)據(jù)庫(kù)PyMongo庫(kù)使用方法
這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫(kù)PyMongo庫(kù)使用方法,本文講解了創(chuàng)建連接、連接數(shù)據(jù)庫(kù)、連接聚集、查看全部聚集名稱(chēng)、查看聚集的一條記錄等操作方法,需要的朋友可以參考下2015-04-04python3+PyQt5實(shí)現(xiàn)拖放功能
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)拖放功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04使用Python從零開(kāi)始擼一個(gè)區(qū)塊鏈
對(duì)數(shù)字貨幣的崛起感到新奇的我們,并且想知道其背后的技術(shù)——區(qū)塊鏈?zhǔn)窃鯓訉?shí)現(xiàn)的。這篇文章主要介紹了使用Python從零開(kāi)始擼一個(gè)區(qū)塊鏈,需要的朋友可以參考下2018-03-03解決Python中pandas讀取*.csv文件出現(xiàn)編碼問(wèn)題
很多朋友在使用Python中pandas讀取csv文件時(shí),出現(xiàn)編碼格式問(wèn)題,接下來(lái)通過(guò)本文給大家分享解決Python中pandas讀取*.csv文件出現(xiàn)編碼問(wèn)題,需要的朋友可以參考下2019-07-07Django日志和調(diào)試工具欄實(shí)現(xiàn)高效的應(yīng)用程序調(diào)試和性能優(yōu)化
這篇文章主要介紹了Django日志和調(diào)試工具欄實(shí)現(xiàn)高效的應(yīng)用程序調(diào)試和性能優(yōu)化,Django日志和調(diào)試工具欄為開(kāi)發(fā)者提供了快速定位應(yīng)用程序問(wèn)題的工具,可提高調(diào)試和性能優(yōu)化效率,提高應(yīng)用程序的可靠性和可維護(hù)性2023-05-05