当前位置: 首页 > news >正文

目标检测任务数据集的数据增强中,图像水平翻转和xml标注文件坐标调整

需求:
        数据集的数据增强中,有时需要用到图像水平翻转的操作,图像水平翻转后,对应的xml标注文件也需要做坐标的调整。

 
解决方法:
        使用python+opencv+import xml.etree.ElementTree对图像水平翻转和xml标注文件坐标调整。代码如下:

import cv2
import os
import glob
import xml.etree.ElementTree as etdef flip_images(source_dir):images_list = glob.glob(os.path.join(source_dir, "*.jpg"))index = 0for image_path in images_list:image = cv2.imread(image_path)flip_image = cv2.flip(image,1)cv2.imwrite(image_path.replace(".jpg", "_flip.jpg"), flip_image)tree_ = et.ElementTree()tree_.parse(image_path.replace(".jpg", ".xml"))root = et.Element("annotation")folder = et.SubElement(root, "folder")folder.text = "images"filename = et.SubElement(root, "filename")filename.text = tree_.find(".//filename").text.replace(".jpg", "_flip.jpg")path = et.SubElement(root, "path")path.text = "/home/mapgoo/test"source = et.SubElement(root, "source")database = et.SubElement(source, "database")database.text = "Unknown"size = et.SubElement(root, "size")width = et.SubElement(size, "width")width.text = tree_.find(".//width").textheight = et.SubElement(size, "height")height.text = tree_.find(".//height").textdepth = et.SubElement(size, "depth")depth.text = "3"segmented = et.SubElement(root, "segmented")segmented.text = "0"for bndbox in tree_.findall(".//object"):xmin = bndbox.find(".//xmin")ymin = bndbox.find(".//ymin")xmax = bndbox.find(".//xmax")ymax = bndbox.find(".//ymax")xmin_text = xmin.textymin_text = ymin.textxmax_text = xmax.textymax_text = ymax.textobject_ = et.SubElement(root, "object")name = et.SubElement(object_, "name")name.text = bndbox.find("name").textpose = et.SubElement(object_, "pose")pose.text = "Unspecified"truncated = et.SubElement(object_, "truncated")truncated.text = "0"difficult = et.SubElement(object_, "difficult")difficult.text = "0"bndbox = et.SubElement(object_, "bndbox")xmin = et.SubElement(bndbox, "xmin")xmin.text = str(image.shape[1] - int(xmax_text))ymin = et.SubElement(bndbox, "ymin")ymin.text = ymin_textxmax = et.SubElement(bndbox, "xmax")xmax.text = str(image.shape[1] - int(xmin_text))ymax = et.SubElement(bndbox, "ymax")ymax.text = ymax_texttree = et.ElementTree(root)tree.write(image_path.replace(".jpg", "_flip.xml"), encoding="utf-8")print(image_path, index)index += 1if __name__ == '__main__':source_dir = "/home/Desktop/test"flip_images(source_dir)

使用以上代码需要修改原图像和标注文件所在文件夹路径(source_dir)。亲测可用。 

http://www.lryc.cn/news/135331.html

相关文章:

  • 系统架构的演变
  • IDC发布《亚太决策支持型分析数据平台评估》报告,亚马逊云科技位列“领导者”类别
  • C#之OpenFileDialog创建和管理文件选择对话框
  • Java中使用MongoTemplate 简单操作MongoDB
  • [Mac软件]Pixelmator Pro 3.3.12 专业图像编辑中文版
  • 吴恩达 GPT Prompting 课程
  • gpt3.5写MATLAB代码剪辑视频,使之保留画面ROI区域
  • 设计模式二十一:状态模式(State Pattern)
  • 【校招VIP】产品思维能力之产品设计
  • 微信小程序卡片横向滚动竖图
  • SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 从极简实现到IOC改进
  • 【AIGC】一款离线版的AI智能换脸工具V2.0分享(支持图片、视频、直播)
  • 管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——选言——相容选言——或
  • Git如何操作本地分支仓库?
  • WPS右键新建没有docx pptx xlsx 修复
  • 【巧学C++之西游篇】No.2 --- C++闹天宫,带着“重载“和“引用“
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
  • KaiwuDB CTO 魏可伟:回归用户本位,打造“小而全”的数据库
  • 行业追踪,2023-08-22
  • 浏览器安装selenium驱动,以Microsoft Edge安装驱动为例
  • 边缘计算网关是如何提高物联网的效率的?
  • AWVS安装~Windows~激活
  • ATFX汇市:杰克逊霍尔年会降至,鲍威尔或再发鹰派言论
  • Zipkin开源的分布式链路追踪系统
  • java 项目运行时,后端控制台出现空指针异常---java.lang.NullPointerException
  • 模型数据处理-数据放入 session和@ModelAttribute 实现 prepare 方法详细讲解
  • 关于android studio 几个简单的问题说明
  • angular常用命令
  • uni-app打包后安卓不显示地图及相关操作详解
  • elelementui组件