脚本:数据裁剪 大图中裁出标注区域

目前这份代码还有问题,这个脚本存在一定的问题,好像是车辆位置和车牌位置的大小计算会出现错误,可以看看有道云笔记的实验记录

# -*- coding: utf-8 -*-
"""
Created on Sun Jan 12 2020
@author: ting.zou
"""

# import os   
# import cv2 

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
import cv2

classes = ["car1","car2","car3","car4"]
temp = ["car1_","car2_","car3_","car4_"]
# 遍历指定目录,显示目录下的所有文件名
def CropImage4File(filepath,destpath):
# list all the path or file  in filepath
    pathDir =  os.listdir(filepath)
    # test=0
    for allDir in pathDir:
        # test = test+1
        # if test >= 10:
        #     break
        print('-------processing image ---------'+allDir)
        child = os.path.join(filepath, allDir)
        if os.path.isfile(child):
            image = cv2.imread(child)
            (image_id,ext) = os.path.splitext(allDir)
            in_file = open('LP_VOC/Annotations/%s.xml' % (image_id))
            tree = ET.parse(in_file)
            root = tree.getroot()
            size = root.find('size')
            w = int(size.find('width').text)
            h = int(size.find('height').text)
            for obj in root.iter('object'):
                difficult = obj.find('difficult').text
                cls = obj.find('name').text
                if cls not in classes or int(difficult) == 1:
                    continue
                cls_id = classes.index(cls)
                for subobj in root.iter('object'):
                    subcls = subobj.find('name').text
                    if temp[cls_id] in subcls:
                        subname = subcls.split('_')[1]
                        finalname = image_id+'_'+subname+'.jpg'
                        #获取车牌坐标box
                        subbox = subobj.find('bndbox')
                        x3=int(subbox.find('xmin').text)
                        x4=int(subbox.find('xmax').text)
                        y3=int(subbox.find('ymin').text)
                        y4=int(subbox.find('ymax').text)
                        # print(finalname)
                dest = os.path.join(destpath,finalname)
                # 获取当前车辆box
                xmlbox = obj.find('bndbox')
                x1=int(xmlbox.find('xmin').text)
                x2=int(xmlbox.find('xmax').text)
                y1=int(xmlbox.find('ymin').text)
                y2=int(xmlbox.find('ymax').text)
                # 裁剪
                # cropImg = image[y1:y2,x1:x2] #crop the image
                # cv2.imwrite(dest,cropImg)# write in destination path

                # 读取车牌在小车上的相对位置并写入新的txt文件
                subx1=x3-x1
                suby1=y3-y1
                subx2=subx1+(x4-x3)
                suby2=suby1+(y4-y3)
                out_file = open('LP2/Annotations/%s.txt' % (finalname), 'w')
                out_file.write(str(subx1)+' '+str(suby1)+' '+str(subx2)+' '+str(suby2) + '\n')

if __name__ == '__main__':
    filepath = 'LP_VOC/JPEGImages'
    destpath = 'LP2'
    CropImage4File(filepath,destpath)
全部评论

相关推荐

牛客ID:561366855:期望薪资多少?难以相信这简历找不到工作。说明二本电子信息专业想对口就业非常难。
点赞 评论 收藏
分享
04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务