【使用imgaug库调整图像大小并修改对应的XML标签框】

使用imgaug库可以方便地进行图像增强操作,包括调整图像大小。以下是使用imgaug库调整图像大小并修改对应的XML标签框的示例脚本:

  • 注意修改输入文件夹路径、输出文件夹路径和目标尺寸为自己内容。
input_folder = "path/to/your/input_folder"
output_folder = "path/to/your/output_folder"
target_size = (640, 640)
  • 输入文件夹结构:
    在这里插入图片描述

全部代码:

import os
import xml.etree.ElementTree as ET
from PIL import Image
import imgaug.augmenters as iaa
from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage
import numpy as npdef resize_and_augment(image_path, xml_folder, output_folder, target_size):# 读取图像image = Image.open(image_path)# 获取XML文件路径xml_filename = os.path.splitext(os.path.basename(image_path))[0] + '.xml'xml_path = os.path.join(xml_folder, xml_filename)# 解析XML文件tree = ET.parse(xml_path)root = tree.getroot()# 读取原始图像大小original_size = image.size# 使用imgaug进行图像和标签框调整seq = iaa.Sequential([iaa.Resize({"height": target_size[0], "width": target_size[1]}),])# 将PIL图像转换为numpy数组image_np = np.array(image)# 从XML中提取所有标签框信息bounding_boxes = []for object_tag in root.iter('object'):bbox_tag = object_tag.find('bndbox')xmin = float(bbox_tag.find('xmin').text)ymin = float(bbox_tag.find('ymin').text)xmax = float(bbox_tag.find('xmax').text)ymax = float(bbox_tag.find('ymax').text)bounding_boxes.append(BoundingBox(x1=xmin, y1=ymin, x2=xmax, y2=ymax))# 创建BoundingBoxesOnImage对象bbs = BoundingBoxesOnImage(bounding_boxes, shape=image_np.shape)# 进行图像和标签框调整augmented_image, bbs_aug = seq(image=image_np, bounding_boxes=bbs)# 创建输出文件夹路径output_images_folder = os.path.join(output_folder, 'images')output_xml_folder = os.path.join(output_folder, 'xml')# 确保输出文件夹存在,如果不存在则创建os.makedirs(output_images_folder, exist_ok=True)os.makedirs(output_xml_folder, exist_ok=True)# 保存调整后的图像augmented_image_path = os.path.join(output_images_folder, os.path.basename(image_path))Image.fromarray(augmented_image).save(augmented_image_path)# 更新XML文件update_xml(xml_path, bbs_aug, original_size, target_size, output_xml_folder)def update_xml(xml_path, bbs_aug, original_size, new_size, output_folder):# 解析XML文件tree = ET.parse(xml_path)root = tree.getroot()# 更新图像尺寸for size_tag in root.iter('size'):width_tag = size_tag.find('width')height_tag = size_tag.find('height')width_tag.text = str(new_size[1])height_tag.text = str(new_size[0])# 更新对象边界框for object_tag, bbox_aug in zip(root.iter('object'), bbs_aug.bounding_boxes):bbox_tag = object_tag.find('bndbox')# 更新坐标for coord, coord_value in zip(['xmin', 'ymin', 'xmax', 'ymax'], [bbox_aug.x1, bbox_aug.y1, bbox_aug.x2, bbox_aug.y2]):coord_tag = bbox_tag.find(coord)coord_tag.text = str(int(coord_value))# 保存更新后的XML文件到输出文件夹updated_xml_filename = os.path.basename(xml_path)updated_xml_path = os.path.join(output_folder, updated_xml_filename)tree.write(updated_xml_path)if __name__ == "__main__":# 输入文件夹路径、输出文件夹路径和目标尺寸input_folder = "path/to/your/input_folder"output_folder = "path/to/your/output_folder"target_size = (640, 640)# 遍历图像文件夹for filename in os.listdir(os.path.join(input_folder, 'images')):if filename.endswith('.jpg'):image_path = os.path.join(input_folder, 'images', filename)resize_and_augment(image_path, os.path.join(input_folder, 'xml'), output_folder, target_size)

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

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

相关文章

kalibr标定ZED2i双目加imu

一、录制bag 本人使用的zed2i相机。 rosbag record -O 32 /zed2i/zed_node/imu/data /zed2i/zed_node/imdata_raw /zed2i/zed_node/left/image_rect_color /zed2i/zed_node/right/image_rect_color /zed2i/zed_node/left_raw/image_raw_color /zed2i/zed_node/right_raw/ima…

Matlab|【免费】基于合作博弈的综合能源系统利益分配优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序实现的模型为综合能源系统利益分配优化调度,采用合作博弈方法,模型针对IES系统的P2G、电解槽、甲烷反应器、储氢罐、CHP和燃气锅炉等设备进行建模,实现基于合作博弈的…

std::shared_from_this注意事项:exception bad_weak_ptr

1.不可以在构造函数中调用shared_from_this() 因为它的实现是&#xff1a; _LIBCPP_INLINE_VISIBILITYshared_ptr<_Tp> shared_from_this(){return shared_ptr<_Tp>(__weak_this_);}也就是它依赖的__weak_this_此时还未创建完成。 2.一定要public继承 class MyTy…

大数据开发(Java面试真题-卷二)

大数据开发&#xff08;Java面试真题&#xff09; 1、请简要说明Java中equeals()和hashCode()的作用及区别&#xff1f;2、Java中的四种访问修饰符及它们之间的区别&#xff1f;3、请解释Java中的异常处理机制&#xff0c;包括checked exception和unchecked exception?4、Java…

Linux 学习笔记(10)

十、 进程管理 进程就是运行中的程序&#xff0c;一个运行着的程序&#xff0c;可能有多个进程。 比如 LinuxSir.Org 所用的 WWW 服务器是 apache 服务器&#xff0c;当管理员启动服务后&#xff0c;可能会有好多人来访问&#xff0c;也就是说许多用户来同时请 求 htt…

QT debug编译失败:xxx/bin/ld.exe: cannot find -lxxd1

原因&#xff1a;由于编译时&#xff0c;使用debug模式下&#xff0c;动态库没有对应的lxxd1中的xx库 解决方案1&#xff1a;改为release编译&#xff1b; 解决方案2&#xff1a;在引用的三方pri文件中&#xff0c;去掉多余的d #修改前 if(!debug_and_release|build_pass):CON…

沃德的背包

题目描述 沃德进入源码世界的路上有很多宝石&#xff0c;可是沃德的背包只能背总重量不超过m的宝石&#xff0c;路上一共有n个宝石&#xff0c;每个宝石的重量为wi&#xff0c;请你帮沃德选择尽量多的宝石装进背包&#xff0c;请注意宝石的总重量不超过m。 输入描述 第一行输…

Django官网项目 二

官网地址&#xff1a;Writing your first Django app, part 2 | Django documentation | Django 创建模组&#xff1a; 注册model &#xff08;bug&#xff1a;没有加后面的逗号&#xff09; 在manage.py 的目录下&#xff1a; python manage.py makemigrations polls pyth…

redis09 集群(cluster)

思维草图 为什么要使用集群 单台redis内存容量的限制单台redis并发写量太大有性能瓶颈 redis集群认识 redis集群是对redis的水平扩容&#xff0c;即启动N个redis节点&#xff0c;将整个数据分布存储在这个N个节点中&#xff0c;每个节点存储总数据的1/N。 如下图&#xff1…

C++ 根据公式计算椭圆任意点到中心的距离

#include <iostream> using namespace std;double fact(int x) //定义阶乘函数。注意是double类型 {double y x; //注意是double类型for (int i x-1; i > 0; i--)y * i;return y; };double My_sin(int x) //定义sin函数。注意是double类型 {double y 0; //注意是do…

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能 法医图像和视频增强软件&#xff0c;专业又强大&#xff01;&#xff01;&#xff01;超过 140 种过滤器和工具&#xff0c;用于分析、恢复和增强数字图像和视频。Amped FIVE能够稳定抖动的视频&…

Linux:ansible-playbook配置文件(剧本)(进阶)

Linux&#xff1a;ansible-playbook配置文件&#xff08;剧本&#xff09;_ansible-playbook -i参数-CSDN博客https://blog.csdn.net/w14768855/article/details/132579492?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170930036016800215061982%2522%252C%2522s…

LaTeX排版论文的常见问题汇总(持续更新中)

文章目录 LaTeX排版论文的常见问题汇总&#xff08;持续更新中&#xff09;1.如何上传期刊或会议提供的LaTeX模板&#xff1f;2.模板中各文件的说明3.LaTeX中如何设置字体大小&#xff1f;3.1如何设置表格中的字体大小&#xff1f;3.2如何设置表格、图片标题的字体大小&#xf…

A/D转换

硬件电路模型 模数转换代码 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

什么是Vue的服务端渲染(SSR)?它有什么作用?

Vue的服务端渲染&#xff08;SSR&#xff09;是指将Vue组件在服务器端进行渲染&#xff0c;然后将已经渲染好的页面返回给浏览器&#xff0c;相比于传统的客户端渲染&#xff0c;SSR可以更好地优化SEO和加速首屏加载速度。在传统的客户端渲染中&#xff0c;浏览器需要加载所有的…

【MySQL系列】在 MacOS 上安装 MySQL

在 MacOS 上有两种方式安装 MySQL 服务器&#xff1a;通过 brew 安装和通过安装包安装。 文章目录 1、通过 brew 安装 MySQL1.1、安装 MySQL1.2、启动 MySQL 服务器1.3、配置 MySQL 服务器1.4、MySQL 服务器管理命令 2、通过安装包安装 MySQL2.1、下载安装包2.2、安装 MySQL2.3…

深入理解快速排序算法:从原理到实现

目录 1. 引言 2. 快速排序算法原理 3. 快速排序的时间复杂度分析 4. 快速排序的应用场景 5. 快速排序的优缺点分析 5.1 优点&#xff1a; 5.2 缺点&#xff1a; 6. Java、JavaScript 和 Python 实现快速排序算法 6.1 Java 实现&#xff1a; 6.2 JavaScript 实现&#…

30、类和接口

文章目录 接口概念接口和类之间有何关系&#xff1f; 可以使用接口来约束类接口继承接口接口还可以继承类接口为什么可以继承类内层原因&#xff1a;接口为什么可以继承类 用得出的结论解释最初的demo接口继承类的一些限制 接口概念 接口&#xff08;Interfaces&#xff09;可…

【大厂AI课学习笔记NO.61】环境部署的选择

主要是选择单机和分布式、生产和开发环境的规划等。 开发环境、测试环境、预发布环境和生产环境是软件开发和部署过程中常见的几个环境&#xff0c;它们各自的定义、区别、联系以及实现的关键技术如下&#xff1a; 1. 开发环境&#xff08;Development Environment&#xff09…

Ai 快捷键学习

Ai 快捷键学习 Ait 鼠标滚轮 实现页面的放大和缩小 空格鼠标左键 抓手工具 ctrl r 调出标尺&#xff0c;可以通过标尺来对其图片 ctrl &#xff1b; 隐藏标尺 ctrl ‘ 调用网格标尺 再按一次就是取削 ctrl shiftz 反向撤回 tab 快速全屏 ctsls / ctrlshift…