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
每行分別為 名稱 檢測(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)文章
python的格式化輸出(format,%)實(shí)例詳解
Python中格式化字符串目前有兩種陣營(yíng):%和format,哪一種比較適合我們使用呢?下面腳本之家小編給大家介紹下python的格式化輸出(format,%)實(shí)例詳解,感興趣的朋友一起看看吧2018-06-06
Python Tkinter創(chuàng)建GUI應(yīng)用程序的示例
Tkinter提供了豐富的功能和靈活的接口,讓開(kāi)發(fā)者能夠輕松地構(gòu)建出各種各樣的圖形用戶界面,本文介紹了使用Python的Tkinter庫(kù)創(chuàng)建圖形用戶界面GUI應(yīng)用程序,感興趣的可以了解一下2024-12-12
Keras保存模型并載入模型繼續(xù)訓(xùn)練的實(shí)現(xiàn)
這篇文章主要介紹了Keras保存模型并載入模型繼續(xù)訓(xùn)練的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Python實(shí)現(xiàn)html轉(zhuǎn)換為pdf報(bào)告(生成pdf報(bào)告)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)html轉(zhuǎn)換為pdf報(bào)告功能,結(jié)合實(shí)例形式分析了Python使用pdfkit實(shí)現(xiàn)HTML轉(zhuǎn)換為PDF的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-05-05
利用nohup來(lái)開(kāi)啟python文件的方法
今天小編就為大家分享一篇利用nohup來(lái)開(kāi)啟python文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python實(shí)現(xiàn)百度文庫(kù)自動(dòng)化爬取
項(xiàng)目是合法項(xiàng)目,只是進(jìn)行數(shù)據(jù)解析而已,不能下載看不到的內(nèi)容.部分文檔在電腦端不能預(yù)覽,但是在手機(jī)端可以預(yù)覽,所有本項(xiàng)目把瀏覽器瀏覽格式改成手機(jī)端,支持Windows和Ubuntu. 本項(xiàng)目使用的是chromedriver來(lái)控制chrome來(lái)模擬人來(lái)操作來(lái)進(jìn)行文檔爬取2021-04-04

