(python读取目标检测PASCAL VOC数据集,将图像采用边缘填充的方法缩放到相应大小(例如640x640),并修改对应的xml文件

python读取目标检测PASCAL VOC数据集,将图像采用边缘填充的方法缩放到相应大小(例如640x640),并修改对应的xml文件

  • 单个文件处理
  • 批处理脚本

单个文件处理

import cv2
import os
import xml.etree.ElementTree as ETdef resize_image_and_xml(image_path, xml_path, target_size):    # 读取图像image = cv2.imread(image_path)# 获取图像原始尺寸original_height, original_width = image.shape[:2]# 计算缩放比例scale_x = target_size / original_widthscale_y = target_size / original_height# 缩放图像resized_image = cv2.resize(image, (target_size, target_size))# 保存缩放后的图像cv2.imwrite('resized_image.jpg', resized_image)# 修改XML文件中的尺寸信息tree = ET.parse(xml_path)root = tree.getroot()# 修改尺寸信息size_tag = root.find('size')size_tag.find('width').text = str(target_size)size_tag.find('height').text = str(target_size)# 修改bounding box的坐标信息for obj in root.findall('object'):bbox = obj.find('bndbox')bbox.find('xmin').text = str(int(float(bbox.find('xmin').text) * scale_x))bbox.find('xmax').text = str(int(float(bbox.find('xmax').text) * scale_x))bbox.find('ymin').text = str(int(float(bbox.find('ymin').text) * scale_y))bbox.find('ymax').text = str(int(float(bbox.find('ymax').text) * scale_y))# 保存修改后的XML文件tree.write('resized_annotation.xml')# 用法示例
image_path = r'C:\Users\GuoQingru\Downloads\pp_fall\temp\fall_0.jpg'
xml_path = r'C:\Users\GuoQingru\Downloads\pp_fall\temp\fall_0.xml'
target_size = 640resize_image_and_xml(image_path, xml_path, target_size)

批处理脚本

import cv2
import os
import xml.etree.ElementTree as ETdef resize_image_and_xml(images_root_old,xml_root_old,image_root_new,xml_root_new,image_name, target_size):    # 读取图像image_path=os.path.join(images_root_old,image_name)image = cv2.imread(image_path)# 获取图像原始尺寸original_height, original_width = image.shape[:2]# 计算缩放比例scale_x = target_size / original_widthscale_y = target_size / original_height# 缩放图像resized_image = cv2.resize(image, (target_size, target_size))# 保存缩放后的图像cv2.imwrite(os.path.join(image_root_new,image_name), resized_image)# 修改XML文件中的尺寸信息tree = ET.parse(os.path.join(xml_root_old,os.path.splitext(image_name)[0]+'.xml'))root = tree.getroot()# 修改尺寸信息size_tag = root.find('size')size_tag.find('width').text = str(target_size)size_tag.find('height').text = str(target_size)# 修改bounding box的坐标信息for obj in root.findall('object'):bbox = obj.find('bndbox')bbox.find('xmin').text = str(int(float(bbox.find('xmin').text) * scale_x))bbox.find('xmax').text = str(int(float(bbox.find('xmax').text) * scale_x))bbox.find('ymin').text = str(int(float(bbox.find('ymin').text) * scale_y))bbox.find('ymax').text = str(int(float(bbox.find('ymax').text) * scale_y))# 保存修改后的XML文件tree.write(os.path.join(xml_root_new,os.path.splitext(image_name)[0]+'.xml'))# 用法示例
target_size = 640# 原先的图像存放路径
images_root_old=r'C:\Users\GuoQingru\Downloads\pp_fall\JEPGImages'
# 原先的xml文件存放路径
xml_root_old=r'C:\Users\GuoQingru\Downloads\pp_fall\Annotations'# 生成的图像存放路径
image_root_new=r'C:\Users\GuoQingru\Downloads\pp_fall\JEPGImages_640'
# 生成的xml存放路径
xml_root_new=r'C:\Users\GuoQingru\Downloads\pp_fall\Annotations_640'images_list=[]
for image_name in os.listdir(images_root_old):images_list.append(image_name)for image_name in images_list:resize_image_and_xml(images_root_old,xml_root_old,image_root_new,xml_root_new,image_name, target_size)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果审核遇到的问题总结

问题一 Guideline 2.3.3 - Performance - Accurate Metadata 2.3.3 Screenshots should show the app in use, and not merely the title art, login page, or splash screen. They may also include text and image overlays (e.g. to demonstrate input mechanisms, such a…

java JMH 学习

JMH 是什么? JMH(Java Microbenchmark Harness)是一款专用于代码微基准测试的工具集,其主要聚焦于方法层面的基准测试,精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写,他们对 JIT 及…

#LLM入门 | langchain | RAG # 4.1 简介_使用 LangChain 访问个人数据

课程介绍:《第四部分:使用 LangChain 访问个人数据》是基于LangChain创始人Harrison Chase与Deeplearning.ai合作开发的课程,旨在教授如何通过LangChain框架使语言模型(LLM)访问和应用用户个人数据。背景说明&#xff…

PD芯片取电:电子设备的动力之源6020 6500

随着现代电子技术的迅猛发展,电源管理技术在各种电子设备中扮演着越来越重要的角色。特别是近年来,随着USB Power Delivery(PD)技术的普及,PD芯片取电技术因其高效、灵活和安全的特点,成为了电子设备充电和…

java项目中如何更优雅的处理空值

在Java项目中,优雅地处理空值(null)是一个重要的实践,因为它有助于提高代码的健壮性和可读性。以下是一些建议,帮助你更优雅地处理空值: 使用Optional类(Java 8及以上) Java 8引入了…

Vue + Element-plus 快速入门

1. 构建项目 npm init vuelatest # 可选项一路回车,使用默认NO,按提示执行3条命令 cd 项目名 npm install npm run dev 2. 下载element-plus npm install element-plus --save 3.替换main.js import { createApp } from vue import ElementPlus from element-plu…

相关性分析

目录 1.交叉功率谱 2. 相关系数 1.交叉功率谱 % 生成两个信号 t 0:0.001:100; x sin(2*pi*1*t)sin(2*pi*2*t); y sin(2*pi*t )sin(2*pi*2*t); % 计算交叉功率谱密度 [Pxy, F] cpsd(x, y, [], [], [], 1/(t(2)-t(1))); % 使用正确的采样频率 % 绘制交叉功率谱密度图 …

ISIS的基本配置

1.IS-IS协议的基本配置(1) 2.IS-IS协议的基本配置(2) 3.IS-IS协议的基本配置(3) 4.案例:IS-IS配置 R1的配置如下: [AR1czy]isis 1 [AR1czy-isis-1]is-level level-1 [AR1czy-isis-…

电磁兼容(EMC):静电放电(ESD)基本原理

目录 1. 静电学简史 2. 摩擦生电原理 3. 总结 静电放电是电磁兼容(EMC)系列里最让人头疼的问题之一。无论是现在还是未来,静电问题肯定是做产品设计需要重点考虑的问题。这里来聊聊关于静电放电的一些发展历程和基本原理。 1. 静电学简史…

公开地图服务

XYZ参考: http://openwhatevermap.xyz/ 高德参考:https://blog.csdn.net/ldlzhy1984/article/details/81015180 https://blog.csdn.net/fredricen/article/details/77189453 高德矢量图:https://webrd02.is.autonavi.com/appmaptile?langzh_cn&size…

市面上好用的AI工具有哪些?

市面上的AI工具数不胜数,选择合适自己的AI工具则需要考虑自己的需求,看是否能满足的使用需求。那么市面上又有哪些好用的AI工具呢? 泰迪智能科技拥有简单易用的大数据挖掘建模平台,能够让数据创造更大的价值。 功能板块&…

技术干货:单体,SOA,微服务,分布式,集群架构详解

理解这些架构概念对于软件工程师至关重要。下面我会简要介绍这些架构,并提供一些示例代码来说明它们的实现方式。 单体架构: 在单体架构中,整个应用程序被构建为一个单独的、紧密耦合的单元。通常使用传统的三层架构:表示层、业务…

C++实现二叉搜索树(模型)

目录 1.二叉搜索树的概念 2.二叉搜索树的实现 2.1总体代码预览 2.2各个函数实现原理 链表结构体 二叉搜索树的成员变量 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的遍历 二叉搜索树的删除 1.二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树&#…

算法训练营第63天|LeetCode 84.柱状图中最大的矩形

完结&#xff01;撒花&#xff01; LeetCode 84.柱状图中最大的矩形 题目链接&#xff1a; LeetCode 84.柱状图中最大的矩形 代码&#xff1a; class Solution { public:int largestRectangleArea(vector<int>& heights) {heights.insert(heights.begin(),0);he…

字符设备驱动流程

字符设备驱动&#xff1a; linux系统驱动程序分为三大类&#xff0c;字符设备驱动&#xff0c;块设备驱动和网络设备驱动。其中字符设备驱动是使用最多的一种&#xff0c;从点灯到llC&#xff0c;SPI&#xff0c;音频设备等的驱动都是字符设备驱动。块设备和网络设备驱动要比字…

5.12 VUE项目实现Google 第三方登录

VUE项目实现Google 第三方登录 目录一、Google开发者平台配置1. 新建项目2. 配置 OAuth 权限请求页面并选择范围3. 启动API 和 服务 二、 登录代码实现1. 参考Google官网文档2. Google官网代码生成器3. 项目中实装 目录 一、Google开发者平台配置 Google Cloud: https://conso…

python读取xml文件并修改object目标label的信息

python读取xml文件并修改object目标label的信息 python读取xml文件并修改object目标label的信息 python读取xml文件并修改object目标label的信息 """ python 读取xml文件内容并完成修改 """ import os import xml.etree.ElementTree as ET from…

可自定义的海外仓系统与传统WMS:哪个更适合你?

在可自定义的海外仓系统和传统的WMS之间进行选择&#xff0c;想确定一个适合自己的正确方案往往并不那么容易。 这需要考虑企业的现状&#xff0c;仓库的经营情况&#xff0c;对管理系统具体的需求等等。今天我们将对这两种系统做一个完整的对比&#xff0c;帮助你决定哪一个更…

盒模型,BFC以及行内块级元素

一.盒模型篇 css基础框盒模型介绍&#xff1a; 当对一个文档进行布局的时候&#xff0c;浏览器的渲染引擎会根据标准之一的css基础框盒模型&#xff0c;将所有元素表示为一个个矩形的盒子&#xff0c;每个盒子由四部分组成&#xff0c;分别是内容 内边距 边框 外边距&#xff…

如何快速搭建nginx虚拟主机

华子目录 实验1&#xff1a;基于IP地址的虚拟主机原理 实验2&#xff1a;基于端口号的虚拟主机原理 实验3&#xff1a;基于域名的虚拟主机原理 实验1&#xff1a;基于IP地址的虚拟主机 原理 如果一台服务器有多个IP地址&#xff0c;而且每个IP地址与服务器上部署的每个网站一一…