Python:批量按xml标注将目标crop剪切图片并按类保存到相应文件夹


from __future__ import division

import os

from PIL import Image

import xml.dom.minidom

import numpy as np

ImgPath = '图片的完整路径/'

AnnoPath = '.XML文件夹所在的路径/'

ProcessedPath = '剪切图片将要存放的路径/'

imagelist = os.listdir(ImgPath)

for image in imagelist:

    image_pre, ext = os.path.splitext(image)

    imgfile = ImgPath + image

    print(imgfile)

    if not os.path.exists(AnnoPath + image_pre + '.xml'): continue

    xmlfile = AnnoPath + image_pre + '.xml'

    DomTree = xml.dom.minidom.parse(xmlfile)

    annotation = DomTree.documentElement

    filenamelist = annotation.getElementsByTagName('filename')  # [<DOM Element: filename at 0x381f788>]

    # filename = filenamelist[0].childNodes[0].data

    objectlist = annotation.getElementsByTagName('object')

    i = 1

    for objects in objectlist:

        namelist = objects.getElementsByTagName('name')

        objectname = namelist[0].childNodes[0].data

        savepath = ProcessedPath + objectname

        if not os.path.exists(savepath):
            os.makedirs(savepath)

        bndbox = objects.getElementsByTagName('bndbox')

        cropboxes = []

        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)

            w = x2 - x1

            h = y2 - y1

            obj = np.array([x1, y1, x2, y2])

            shift = np.array([[1, 1, 1, 1]])

            XYmatrix = np.tile(obj, (1, 1))

            cropboxes = XYmatrix * shift

            img = Image.open(imgfile)

            for cropbox in cropboxes:
                cropedimg = img.crop(cropbox)

                cropedimg.save(savepath + '/' + image_pre + '_' + str(i) + '.jpg')

                i += 1



转载自:Python:批量按xml标注将目标crop剪切图片并按类保存到相应文件夹

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值