亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python目標檢測給圖畫框,bbox畫到圖上并保存案例

 更新時間:2020年03月10日 10:56:35   作者:別說話寫代碼  
這篇文章主要介紹了python目標檢測給圖畫框,bbox畫到圖上并保存案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,還是直接上代碼吧!

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)
    # 打開xml文檔
    DOMTree = xml.dom.minidom.parse(xmlfile)
    # 得到文檔元素對象
    collection = DOMTree.documentElement
    # 讀取圖片
    img = cv.imread(imgfile)
 
    filenamelist = collection.getElementsByTagName("filename")
    filename = filenamelist[0].childNodes[0].data
    print(filename)
    # 得到標簽名為object的信息
    objectlist = collection.getElementsByTagName("object")
 
    for objects in objectlist:
      # 每個object中得到子標簽名為name的信息
      namelist = objects.getElementsByTagName('name')
      # 通過此語句得到具體的某個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')  #注意坐標,看是否需要轉換
        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

補充知識:深度學習python之用Faster-rcnn 檢測結果(txt文件) 在原圖畫出box

使用Faster-rcnn 的test_net.py 檢測網(wǎng)絡的mAP等精度會生成一個檢測結果(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

每行分別為 名稱 檢測概率 xmin ymin xmax ymax

問題在于每一行只顯示一個box數(shù)據(jù),每幅圖像可能包括多個box,需要判斷提取的多行數(shù)據(jù)是不是屬于同一圖片

下面使用python提取這些數(shù)據(jù),在原圖上畫出box并且保存起來

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

運行完即可在保存文件夾中得到效果圖。

以上這篇python目標檢測給圖畫框,bbox畫到圖上并保存案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Tensorflow卷積神經(jīng)網(wǎng)絡實例

    Tensorflow卷積神經(jīng)網(wǎng)絡實例

    這篇文章主要為大家詳細介紹了Tensorflow卷積神經(jīng)網(wǎng)絡實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python中的sys模塊和os模塊

    python中的sys模塊和os模塊

    這篇文章主要介紹了python中的sys模塊和os模塊,sys模塊提供對解釋器使用或維護的一些變量的訪問,以及與解釋器強烈交互的函數(shù),os模塊提供了多數(shù)操作系統(tǒng)的功能接口函數(shù),下文更多相關內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法

    Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法

    這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法,本文講解了創(chuàng)建連接、連接數(shù)據(jù)庫、連接聚集、查看全部聚集名稱、查看聚集的一條記錄等操作方法,需要的朋友可以參考下
    2015-04-04
  • python3+PyQt5實現(xiàn)拖放功能

    python3+PyQt5實現(xiàn)拖放功能

    這篇文章主要為大家詳細介紹了python3+PyQt5實現(xiàn)拖放功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python中關于property使用的小技巧

    Python中關于property使用的小技巧

    俗話說條條大路通羅馬,同樣是完成一件事,Python 其實提供了好幾個方式供你選擇。property() 是一個比較奇葩的BIF,它的作用把方法當作屬性來訪問,從而提供更加友好訪問方式
    2021-09-09
  • 使用Python從零開始擼一個區(qū)塊鏈

    使用Python從零開始擼一個區(qū)塊鏈

    對數(shù)字貨幣的崛起感到新奇的我們,并且想知道其背后的技術——區(qū)塊鏈是怎樣實現(xiàn)的。這篇文章主要介紹了使用Python從零開始擼一個區(qū)塊鏈,需要的朋友可以參考下
    2018-03-03
  • Python如何調(diào)用外部系統(tǒng)命令

    Python如何調(diào)用外部系統(tǒng)命令

    這篇文章主要介紹了Python如何調(diào)用外部系統(tǒng)命令,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 解決Python中pandas讀取*.csv文件出現(xiàn)編碼問題

    解決Python中pandas讀取*.csv文件出現(xiàn)編碼問題

    很多朋友在使用Python中pandas讀取csv文件時,出現(xiàn)編碼格式問題,接下來通過本文給大家分享解決Python中pandas讀取*.csv文件出現(xiàn)編碼問題,需要的朋友可以參考下
    2019-07-07
  • Django日志和調(diào)試工具欄實現(xiàn)高效的應用程序調(diào)試和性能優(yōu)化

    Django日志和調(diào)試工具欄實現(xiàn)高效的應用程序調(diào)試和性能優(yōu)化

    這篇文章主要介紹了Django日志和調(diào)試工具欄實現(xiàn)高效的應用程序調(diào)試和性能優(yōu)化,Django日志和調(diào)試工具欄為開發(fā)者提供了快速定位應用程序問題的工具,可提高調(diào)試和性能優(yōu)化效率,提高應用程序的可靠性和可維護性
    2023-05-05
  • python?中Mixin混入類的使用方法詳解

    python?中Mixin混入類的使用方法詳解

    這篇文章主要介紹了python?中Mixin混入類的使用方法詳解,Mixin?混入也可以說是編程模式,并不是什么新的語法,用好混入類可以使自己的代碼結構清晰,功能明了,所以以后在設計類時要多考慮使用Mixin混入類的實現(xiàn)方式
    2022-07-07

最新評論