目标检测VOC数据集:用PIL实现xml和图片的同步缩放

import os
from PIL import Image
import platform
import xml.dom.minidom


class HandleXmlImage:

    def get_file_path(self, dir_file):
        self.system_version = platform.platform()
        file_name_list = os.listdir(dir_file)
        for file_name in file_name_list:
            if 'Windows' in self.system_version:
                file_path = dir_file + f'\\{file_name}'
            else:
                file_path = dir_file + f'/{file_name}'
            yield file_path, file_name

    def updage_Image(self, file_path, number_after_change_height, file_name, dir_file):
        img = Image.open(file_path)
        height, width = img.size
        scale = number_after_change_height / height
        height = number_after_change_height
        width = int(width * scale)
        new_img = img.resize((width, height), Image.ANTIALIAS)
        new_path = dir_file + '_new'
        if not os.path.exists(new_path):
            os.makedirs(new_path)
        if 'Windows' in self.system_version:
            new_file = new_path + f'\\{file_name}'
        else:
            new_file = new_path + f'/{file_name}'
        new_img.save(new_file, 'JPEG')
        return scale, height, width

    def updata_xml(self, file_path, scale, height, width, file_name, dir_file):
        self.system_version = 'Window'
        dom = xml.dom.minidom.parse(file_path)
        root = dom.documentElement
        size_object = root.getElementsByTagName("size")[0]
        size_object.getElementsByTagName('height')[0].firstChild.data = height
        size_object.getElementsByTagName('width')[0].firstChild.data = width

        bndbox_object = root.getElementsByTagName("bndbox")[0]
        bndbox_object.getElementsByTagName('xmin')[0].firstChild.data = float(
            bndbox_object.getElementsByTagName('xmin')[0].firstChild.data) * scale
        bndbox_object.getElementsByTagName('ymin')[0].firstChild.data = float(
            bndbox_object.getElementsByTagName('ymin')[0].firstChild.data) * scale
        bndbox_object.getElementsByTagName('xmax')[0].firstChild.data = float(
            bndbox_object.getElementsByTagName('xmax')[0].firstChild.data) * scale
        bndbox_object.getElementsByTagName('ymax')[0].firstChild.data = float(
            bndbox_object.getElementsByTagName('ymax')[0].firstChild.data) * scale

        new_path = dir_file + '_new'
        if not os.path.exists(new_path):
            os.makedirs(new_path)
        if 'Windows' in self.system_version:
            new_file = new_path + f'\\{file_name}'
        else:
            new_file = new_path + f'/{file_name}'

        with open(new_file, 'w', encoding='utf8') as f:
            dom.writexml(f, addindent='  ', encoding='utf8')

    def run(self, xml_path, image_path, number_after_change_height):
        xml_range = self.get_file_path(xml_path)
        image_list = list(self.get_file_path(image_path))

        for index, xml_data in enumerate(xml_range):
            xml_file_path, xml_file_name = xml_data
            image_file_path, image_file_name = image_list[index]
            print(image_file_name, image_file_path)
            scale, height, width = self.updage_Image(image_file_path, number_after_change_height, image_file_name,
                                                     image_path)
            print(scale, height, width)
            self.updata_xml(xml_file_path, scale, height, width, xml_file_name, xml_path)


if __name__ == '__main__':
    xml_path = input('请输入xml文件夹路径>>>:')
    image_path = input('请输入image文件夹路径>>>:')
    number_after_change_height = int(input("请输入改变后高度>>>:"))
    HandleXmlImage().run(xml_path, image_path, number_after_change_height)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
voc 2017 目标检测数据集可以从官方网站获取。首先,我们可以通过搜索"voc 2017 目标检测数据集下载"来找到相关的网页。在网页上,我们可以找到下载链接,点击链接后,会弹出下载选项。我们可以选择保存文件,并选择一个合适的存储位置。然后,等待数据集的下载完成。 voc 2017 目标检测数据集是用于计算机视觉领域的一个重要数据集,主要用于目标检测算法的评估与研究。数据集中包含了大量真实世界的图像和对应的标记框。这些标记框用于标识图像中的不同目标物体的位置和类别信息。 下载并使用这个数据集可以帮助研究人员和开发者评估他们的目标检测算法在真实数据上的性能表现,并进行进一步的改进和优化。同时,这个数据集也可以作为教育和学习的资源,帮助初学者理解和熟悉目标检测的基本概念和方法。 下载数据集后,我们可以使用相应的工具和库来加载和处理数据集。例如,使用Python的一个开源库如OpenCV或PIL来读取图像,并根据标记框的信息来提取目标物体的特征。然后,我们可以使用机器学习或深度学习的算法来训练模型,并在数据集上进行目标检测的实验和测试。 总之,voc 2017 目标检测数据集的下载和使用是进行目标检测算法研究和实践的重要一步。它提供了丰富的真实图像和标记框,为开发者和研究人员提供了机会来探索和改进目标检测算法的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值