美文网首页
对pascal voc格式的数据画框

对pascal voc格式的数据画框

作者: 几时见得清梦 | 来源:发表于2019-07-27 16:20 被阅读0次
#!/usr/bin/env python
from __future__ import print_function
import re
import os
import sys
import cv2
import shutil
import numpy as np
from lxml import etree


def show(xmlfilename, jpgfilename, jpgxmlfilename):
  im = cv2.imread(jpgfilename)
  tree  = etree.parse(xmlfilename)
  root = tree.getroot() 
  objectes = root.findall('.//object')
  
  for object in objectes:
    name = object.find("name")
    score = object.find("score")
    bndbox = object.find("bndbox")
    xmin = bndbox.find("xmin").text
    ymin = bndbox.find("ymin").text
    xmax = bndbox.find("xmax").text
    ymax = bndbox.find("ymax").text
    Y = np.array([float(ymin), float(ymax)])
    
    for i in range(len(Y)):
      Y[i] = int(round(Y[i]))
    X = np.array([float(xmin), float(xmax)])
    
    for i in range(len(X)):
      X[i] = int(round(X[i]))
      
    cv2.rectangle(im,(int(X[0]),int(Y[0])),(int(X[1]),int(Y[1])),(0,0,255),2)
    yoffset = int(Y[0])
    
    if yoffset > 14:
      yoffset = yoffset - 4
    else:
      yoffset = yoffset + 12
      
    if score:
      cv2.putText(im, name.text + ' '+score[0].text, (int(X[0]),yoffset), cv2.FONT_HERSHEY_PLAIN,1, (255,0,0), 1, 25)
    else:
      cv2.putText(im, name.text, (int(X[0]),yoffset), cv2.FONT_HERSHEY_PLAIN,10, (255,0,0), 10, 25)
      
  cv2.imwrite(jpgxmlfilename,im)
  return
  
  
def main():
  jpeg_dir,xml_dir,jpegxml_dir = process_arguments(sys.argv)
  
  if not os.path.exists(jpeg_dir):
    print('path not exist:',jpeg_dir)
    return
    
  if not os.path.exists(xml_dir):
    print('path not exist:',xml_dir)
    return
    
  if os.path.exists(jpegxml_dir):
    shutil.rmtree(jpegxml_dir)
  os.makedirs(jpegxml_dir)
  
  for root, dirs, files in os.walk( xml_dir ):
    for fn in files:
      filename = fn.split('.')
      xmlfilename=root+'/'+fn
      jpgfilename = jpeg_dir+'/'+filename[0] + '.jpg'
      jpgxmlfilename = jpegxml_dir+'/'+filename[0] + '.jpg'
      print(xmlfilename)
      print(jpgfilename)
      print(jpgxmlfilename)
      show(xmlfilename, jpgfilename, jpgxmlfilename)
      
      
def process_arguments(argv):
  if len(argv) < 4:
    help()
  jpeg_dir = argv[1]
  xml_dir = argv[2]
  jpegxml_dir = argv[3]
  
  return jpeg_dir,xml_dir,jpegxml_dir
  
  
def help():
  print('Usage: python main.py jpeg_dir,xml_dir,jpegxml_dir\n')
  exit()
  
  
if __name__ == '__main__':
  main()

相关文章

网友评论

      本文标题:对pascal voc格式的数据画框

      本文链接:https://www.haomeiwen.com/subject/gpyerctx.html