上下左右翻转照片以及标注信息扩充数据集

目录

前言:

示例项目数据结构:

源代码:

运行代码后生成的项目结构:

效果:


前言:

使用yolo训练模型时,遇到数据集很小的情况(一两百张),训练出来的模型效果不好,可以选择扩充数据集重新训练,这篇文章提供将照片左右翻转,上下翻转,以及将标注信息进行对应的翻转,这里的标注信息是yolo五列格式的:

分别代表:类别、归一化的中心点的x坐标、归一化的中心点的y坐标、归一化的目标狂的宽、归一化的目标框的高

示例项目数据结构:

源代码:
from PIL import Image
import os

root_dir = 'D:\python\PycharmProjects\photo-deal\\transpose-image\data'
images_dir = "images"
labels_dir = "labels"
for file in os.listdir(os.path.join(root_dir, images_dir)):
    name, ext = os.path.splitext(file)
    image = Image.open(os.path.join(root_dir, images_dir, file))
    # 获取图像的长和宽
    width, height = image.size
    image.transpose(Image.FLIP_TOP_BOTTOM).save(os.path.join(root_dir, images_dir, name + '_tb' + ext))  # 上下翻转
    # 读取对应的txt
    tbtext_list = []
    with open(os.path.join(root_dir, labels_dir, name + '.txt'), "r") as annofile:
        for line in annofile:
            line = line.strip()
            rects = line.split(" ")
            tbtext_list.append(
                rects[0] + " " + rects[1] + " " + "{:.6f}".format((1.0 - float(rects[2]))) + " " + rects[3] + " " +
                rects[4])
    with open(os.path.join(root_dir, labels_dir, name + '_tb.txt'), 'a') as classify_annofile:
        for item in tbtext_list:
            classify_annofile.write(item + "\n")  # 写入内容并换行
    # 翻转图像并保存
    image.transpose(Image.FLIP_LEFT_RIGHT).save(os.path.join(root_dir, images_dir, name + '_lr' + ext))  # 左右翻转
    # 翻转txt文件
    # 读取对应的txt
    text_list = []
    with open(os.path.join(root_dir, labels_dir, name + '.txt'), "r") as annofile:
        for line in annofile:
            line = line.strip()
            rects = line.split(" ")
            text_list.append(
                rects[0] + " " + "{:.6f}".format((1.0 - float(rects[1]))) + " " + rects[2] + " " + rects[3] + " " +
                rects[4])
    with open(os.path.join(root_dir, labels_dir, name + '_lr.txt'), 'a') as classify_annofile:
        for item in text_list:
            classify_annofile.write(item + "\n")  # 写入内容并换行
    print(file + "图像已处理")
运行代码后生成的项目结构:

效果:

原图:

翻转后:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

四天学会JS高阶(学好vue的关键)——作用域解构箭头函数(理论+实战)(第一天)

一、作用域 提到作用域(作用域又分为局部作用域和全局作用域),就要想到变量。因为作用域规定了变量能够被访问的范围(也就是作用域是为变量而服务的),为了避免全局变量污染这一情况,所以需要使…

关闭 Visual Studio Code 项目中 的eslint的语法校验 lintOnSave: false;; 项目运行起来之后 自动打开浏览器 端口

1、在 vue.config.js 配置 一个属性 lintOnSave: false 2、配置两个属性 open: true, // 自动打开浏览器 port: 3000 // 端口 port 端口号根据自己的项目实际开发来 配置

C++类细节,反汇编,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载? 4. struct vs union4.1. 为什么要内存对齐? 5. static作用6. 空类vs空结构体6.1. 八个默认函数:6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量…

用友网络的危与机:2023年亏损约10亿元,王文京面临严肃拷问

“企业在新的产业浪潮来临时,应该主动推进新阶段的产品和业务创新,这样才能够在新的浪潮成为主流的时候,走到行业前面,否则就会从产业发展的潮流中掉下来”。用友网络创始人王文京,曾用“冲浪理论”形容一家企业成功的…

国内好用的测试用例管理工具有哪些?

目前市面上的测试用例管理工具有很多,但由于针对的项目、领域、目标用户,功能也并不一致,所以选择一款适合的测试管理平台并不轻松。做好这件事,首先要需求明确你用测试管理工具干什么?最终想要达到什么目标&#xff1…

C语言学习(八)typedef 虚拟内存 malloc/free

目录 一、typedef 类型重定义(一)使用(二)define和typedef的区别1. 编译处理的阶段不同2. 功能不同 二、虚拟内存(一)虚拟内存分布(二)内存分布1. 静态分配2. 动态分配 三、malloc/f…

用sunoAI写粤语歌的方法,博主已经亲自实践可行

粤语歌还是很好听的,那么如何使用suno进行粤语歌的创作呢? 本文和大家进行分享下如何进行粤语歌曲的创作。 访问地址如下(电脑端/手机端一个地址): ​https://suno3.cn/#/?i8NCBS8_WXTT 在微信浏览器中也可以直接…

RT-DETR改进教程|加入SCNet中的SCConv[CVPR2020]自校准卷积模块!

⭐⭐ RT-DETR改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ⭐⭐ 一、 论文介绍 论文链接:http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf 代码链接:https://gitcode.com/MCG-NKU/SCNet/ 文章摘要: CNN的最新进展主要致力于设计更…

文字转成活码的3步操作,手机扫码即可查看文本信息

现在经常会通过二维码的方式来传递通知的文字信息,只需要分享文字生成二维码的图片到微信群或者印刷出来,其他人就可以通过扫码来查看文字内容,有利于其他人更快速的获取信息。 目前文本静态码无法通过微信来扫码展示,那么想要解…

服务器被后台爆破怎么处理

服务器后台遭受密码爆破攻击是网络安全中常见的威胁之一,这种攻击通过不断尝试不同的用户名和密码组合来破解系统登录凭证,一旦成功,攻击者便能非法访问系统资源。 本文将介绍如何识别此类攻击,并采取有效措施进行防御&#xff0c…

ETL-kettle数据转换及组件使用详解

目录 一、txt文本转换成excel 1、新建、转换 2、构建流程图 3、配置数据流图中的各个组件 3.1、配置文件文本输入组件 3.2、 配置Excel输出组件 4、保存执行 二、excel转换成mysql (1)在MySQL数据库中创建数据库,这个根据自身情况。我…

(python)cryptography-安全的加密

前言 cryptography 是一个广泛使用的 Python 加密库,提供了各种加密、哈希和签名算法的实现。它支持多种加密算法,如 AES、RSA、ECC 等,以及哈希函数(如 SHA-256、SHA-384 等)和数字签名算法(如 DSA、ECDSA 等). 目录 …

一本书打通SLAM在智能汽车/自动驾驶领域应用

自动驾驶技术已成为当今数字化时代汽车行业的热点话题之一。随着技术的不断成熟,越来越多的车辆采用激光SLAM(即时定位与地图构建)和视觉SLAM技术,实现更高层次的智能网联汽车。SLAM技术在智能网联汽车中的应用是非常重要的&#…

[XYCTF新生赛]-PWN:baby_gift解析(函数调用前需清空eax)

查看保护 查看ida 这里有一处栈溢出,并且从汇编上看,程序将rbp0x20处设置为了rdi,让我们可以控制rdi的值。而程序没有可利用的pop。 完整exp: from pwn import* pprocess(./babygift) premote(gz.imxbt.cn,20833) printf_plt0x4…

如何通过ETL工具对数据进行去重

在数据处理流程中,数据去重是一个至关重要的环节,它能够确保数据分析的准确性和效率。ETL(Extract, Transform, Load)工具作为数据集成的重要组成部分,提供了强大的功能来帮助用户实现数据的抽取、转换和加载&#xff…

【Unity Shader入门精要 第7章】基础纹理(一)

1. 纹理映射 每一张纹理可以看作拥有一个属于自己的2D坐标空间,其横轴用U表示,纵轴用V表示,因此也称为UV坐标空间。 UV空间的坐标范围为[0,0]到[1,1],在Unity中,UV空间也是从左下到右上&#…

神经网络复习--卷积神经网络及其扩展

文章目录 卷积卷积网络反向传播已知池化层误差,反向求上一层隐藏层误差已知卷积层的误差,推导该层的W, b的梯度 注意力机制Transformer卷积变体 卷积 卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,每个平面由多个独…

免费pr相册模板mogrt|手机壁纸AI绘画摄影作品照片展示模板视频素材

pr相册模板mogrt,手机壁纸、电脑桌面壁纸、AI绘画、摄影作品、照片展示模板视频素材。 Premiere Pro 2023及以上版本。 全高清(19201080)分辨率/30fps。 通用表达式(适用于所有特效语言)。 免费下载:https…

防火墙技术的演进,什么是下一代防火墙(NGFW)?

防火墙技术的演进 防火墙技术的演进经历了不同阶段,从包过滤防火墙到状态检测防火墙,再到集成多种安全功能的UTM(统一威胁管理)设备,最终发展到具备应用识别能力的NGFW(下一代防火墙)。 包过滤…