这里写目录标题

  • 一、效果图
  • 二、代码

一、效果图

二、代码

import cv2
import math
import numpy as np
import os
import glob
import json
import shutil
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import ElementTree, Elementdef getRotatedImg(Pi_angle,img_path,img_write_path):img = cv2.imread(img_path)rows, cols = img.shape[:2]a, b = cols / 2, rows / 2M = cv2.getRotationMatrix2D((a, b), angle, 1)rotated_img = cv2.warpAffine(img, M, (cols, rows))  # 旋转后的图像保持大小不变cv2.imwrite(img_write_path,rotated_img)return a,bdef getRotatedAnno(Pi_angle,a,b,anno_path,anno_write_path):tree = ET.parse(anno_path)root = tree.getroot()objects = root.findall("object")for obj in objects:bbox = obj.find('bndbox')x1 = float(bbox.find('xmin').text) - 1y1 = float(bbox.find('ymin').text) - 1x2 = float(bbox.find('xmax').text) - 1y2 = float(bbox.find('ymax').text) - 1x3=x1y3=y2x4=x2y4=y1X1 = (x1 - a) * math.cos(Pi_angle) - (y1 - b) * math.sin(Pi_angle) + aY1 = (x1 - a) * math.sin(Pi_angle) + (y1 - b) * math.cos(Pi_angle) + bX2 = (x2 - a) * math.cos(Pi_angle) - (y2 - b) * math.sin(Pi_angle) + aY2 = (x2 - a) * math.sin(Pi_angle) + (y2 - b) * math.cos(Pi_angle) + bX3 = (x3 - a) * math.cos(Pi_angle) - (y3 - b) * math.sin(Pi_angle) + aY3 = (x3 - a) * math.sin(Pi_angle) + (y3 - b) * math.cos(Pi_angle) + bX4 = (x4 - a) * math.cos(Pi_angle) - (y4 - b) * math.sin(Pi_angle) + aY4 = (x4 - a) * math.sin(Pi_angle) + (y4 - b) * math.cos(Pi_angle) + bX_MIN=min(X1,X2,X3,X4)X_MAX = max(X1, X2, X3, X4)Y_MIN = min(Y1, Y2, Y3, Y4)Y_MAX = max(Y1, Y2, Y3, Y4)bbox.find('xmin').text=str(int(X_MIN))bbox.find('ymin').text=str(int(Y_MIN))bbox.find('xmax').text=str(int(X_MAX))bbox.find('ymax').text=str(int(Y_MAX))tree.write(anno_write_path)  # 保存修改后的XML文件def rotate(angle,img_dir,anno_dir,img_write_dir,anno_write_dir):if not os.path.exists(img_write_dir):os.makedirs(img_write_dir)if not os.path.exists(anno_write_dir):os.makedirs(anno_write_dir)Pi_angle = -angle * math.pi / 180.0  # 弧度制,后面旋转坐标需要用到,注意负号!!!img_names=os.listdir(img_dir)for img_name in img_names:img_path=os.path.join(img_dir,img_name)img_write_path=os.path.join(img_write_dir,img_name[:-4]+'R'+str(angle)+'.jpg')#anno_path=os.path.join(anno_dir,img_name[:-4]+'.xml')anno_write_path = os.path.join(anno_write_dir, img_name[:-4]+'R'+str(angle)+'.xml')#a,b=getRotatedImg(Pi_angle,img_path,img_write_path)getRotatedAnno(Pi_angle,a,b,anno_path,anno_write_path)# 旋转较度
angle = 15
# 原始图片地址
img_dir = r'J:\hive-master\datasets\1\images'
# 原始标签地址
anno_dir = r'J:\hive-master\datasets\1\annotations'
# 旋转后图片地址
img_write_dir = r'J:\hive-master\datasets\1\15\new_images'
# 旋转后标签地址
anno_write_dir = r'J:\hive-master\datasets\1\15\new_annotations'rotate(angle, img_dir, anno_dir, img_write_dir, anno_write_dir)

【数据增强】任意角度旋转(图片+标签)相关推荐

  1. 任意角度旋转图片的ground truth目标检测框

    任意角度旋转图片的ground truth目标检测框 (感谢前辈)转自:https://zhuanlan.zhihu.com/p/72129125 因为检测一个物体的时候需要对目标进行多个任意角度的旋 ...

  2. 在word中输入任意角度旋转图片

    Sub 图片旋转任意角度() Dim sha As Shape, isa As InlineShapeStatic s As IntegerApplication.ScreenUpdating = 0 ...

  3. JAVA对图片的任意角度旋转,以及镜像操作

    package relevantTest; /*  * 该代码实现了对图像的水平镜像变换,垂直镜像变换,任意角度旋转,jtf的实时监控,以及对图像的缩放变换,以及按钮的若隐若现效果.  * 在对图像进 ...

  4. java如何利用rotate旋转图片_JAVA对图片的任意角度旋转,以及镜像操作

    package relevantTest; /* * 该代码实现了对图像的水平镜像变换,垂直镜像变换,任意角度旋转,jtf的实时监控,以及对图像的缩放变换,以及按钮的若隐若现效果. * 在对图像进行任 ...

  5. java 旋转图片_Java实现图片翻转以及任意角度旋转

    最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...

  6. java如何利用rotate旋转图片_Java实现图片翻转以及任意角度旋转

    最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...

  7. yolo数据增强以及批量修改图片和xml名

    记录下打完标签对数据集进行扩增,数据增强后的图片及标签名字进行修改,重点在代码只需更改文件名就可使用 无论数据增强还是修改名称,标签框位置都会跟着改变!!! 前人之鉴,最好还是数据增强后再去打标签,千 ...

  8. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))

    Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...

  9. java 图片旋转_Java实现图片内容无损任意角度旋转

    主要问题是如何在图片做旋转后计算出新图片的长宽. 在java 2d和基本math库的帮助下,其实利用简单的计算就可以知道. 以下算法只是计算出旋转小于90度时的公式.当旋转大于90时,可以先把问题域换 ...

最新文章

  1. 图解法求最优解的例题_【第四章 最优化理论】4.2 带约束最优化
  2. python计算每月工资-5万的工资,用Python算一算少交多少税?
  3. linux-shell面试题 之二
  4. 中如何对一个数取余_如何找到自己在一个城市中的定位?
  5. 美网络司令部:马上修复严重的 PAN-OS 漏洞,免遭国家黑客攻击
  6. MATLAB 中BP神经网络算法用于回归拟合的实现
  7. 强行进入远程计算机,远程桌面强制连接命令
  8. 《Java开发实战经典》习题第3章第12题:使用for循环打印下面的图形(用for循环打印金字塔)
  9. 计算机技能大赛简报,网络攻防比赛简报
  10. 实现uniapp 内部下载apk文件和安装
  11. FDA“长寿药”NMN被爆几毛一克,富豪被收天价智商税?
  12. 【Python】实现一个小说下载器,可以打包成exe(附原码)
  13. Mysql 6.0无法手动抛异常
  14. GD32E232Kx 引脚功能表
  15. GHOST使用教程(图解)
  16. mongodb多数据源配置
  17. 中科大计算机机试题,中科大计算机考研2006-2012机试试题
  18. 华为智能矿山联合解决方案:1张网、1朵云、1平台、N应用、5中心
  19. Restorator破解版下载
  20. 每日一面 - sqrt (2)约等于 1.414,如何求sqrt (2)小数点后 10 位

热门文章

  1. 中国乙烯-丙烯酸酯橡胶(AEM)市场调研报告(2022版)
  2. Verrazzano本地搭建实战(基于Kubernetes 1.16.15)
  3. Flutter 字节跳动穿山甲广告插件发布 - FlutterAds
  4. 混沌在计算机应用,混沌时代:大战计算机应用
  5. 新时达电梯服务器显示外呼错,新时达电梯维修常见问题分析
  6. pybind11使用教程笔记__4.3_binding STL containers -- opaque types
  7. 大数据-极值数据学院
  8. 20万奖金池!大规模电商图上的风险商品检测赛事正式启动!阿里安全 × ICDM 2022...
  9. 【工作复盘】2021年1月份工作复盘——2021年1月30日
  10. div class=article_content tracking-ad id=article_content data-mod=popu_307 data-dsm=post