IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> yolo旋转图片和标签坐标,数据增强 -> 正文阅读

[人工智能]yolo旋转图片和标签坐标,数据增强

前言

  对yolo做数据增强,旋转图片后,标签的坐标也要跟着旋转,网上看了一大堆不是旋转的图片有问题就是旋转后的标签有问题,自己写了一个,欢迎指点评论。

直接上代码,有注释,看不懂的欢迎评论区和私信

import cv2
import numpy as np
import os
from math import cos,sin

jiaodu=30       #旋转的角度
zq_id="zq1"     #旋转后的名字(在原有名字的后面加上zq1)

img_folder="images"     #存储需要处理的图片的文件夹路径
img_save_folder="images"  #旋转后需要保存图像的文件夹路径

txt_folder="labelTxt"    #对应图片标签的文件夹路径(标签文件名需要和对应的图片文件名一样)
txt_save_folder="labelTxt"    #旋转后需要保存标签的文件夹路径

Add_label_information=False     #是否在旋转后的标签文件中加入标签信息

#坐标旋转计算函数
def rotate_xy(x, y, angle, cx, cy):  #参数需要旋转点的x、y坐标,旋转角度、旋转中心点的x、y坐标
    """
    点(x,y) 绕(cx,cy)点旋转
    """
    # print(cx,cy)
    angle = angle * np.pi / 180          #旋转角度需要转换一下格式
    x_new = (x - cx) * cos(angle) - (y - cy) * sin(angle) + cx      #计算旋转后的x坐标
    y_new = (x - cx) * sin(angle) + (y - cy) * cos(angle) + cy      #计算旋转后的y坐标
    return [x_new, y_new]             #返回旋转后的[x,y]坐标

#图像和坐标旋转增强
for img_path in os.listdir(img_folder):

    #图像旋转
    img=cv2.imread(img_folder+"/"+img_path)      #读图
    height,width=img.shape[:2]              #获取宽和高
    cx,cy=height/2,width/2  #计算旋转中心点的坐标
    M=cv2.getRotationMatrix2D((cx,cy),jiaodu,1)         #根据旋转角度计算映射矩阵
    dst=cv2.warpAffine(img,M,(height,width),borderValue=(255,255,255))   #根据映射矩阵旋转图像
    cv2.imwrite(img_save_folder+"/"+os.path.splitext(img_path)[0]+zq_id+'.jpg',dst)   #保存图像

    #标签旋转
    txt=open(txt_folder+"/"+os.path.splitext(img_path)[0]+".txt").read()  #读标签
    points_list=[]          #用于保存原来的坐标点[[x1,y1],[x2,y2],[x3,y3],[x4,y4]]
    for i in range(8)[::2]:
        points_list.append([txt.split(' ')[i],txt.split(' ')[i+1]])    #将原始坐标组合为【x1,y1】的形式存储到列表中   
    new_newpoints=[]        #格式和points_list一样,用于保存旋转后的坐标
    for i in points_list:
        new_newpoints.append(rotate_xy(float(i[0]),float(i[1]),-jiaodu,cx,cy))#将每一个点进行旋转
    
    #加入标签信息
    if Add_label_information:        #如果需要加入标签信息请修改标签信息那一行
        sava_txt=''             
        for i in new_newpoints:
            for j in i:
                sava_txt+=str(j)+' '
        sava_txt+=txt.split(' ')[-2]+' '+txt.split(' ')[-1]   #最后加入标签信息,这里我最后有两个标签信息,
                                                              #一般情况只有一个标签信息,删掉前面的txt.split(' ')[-2]+' '+就行了
        dir_name=txt_save_folder+"/"+os.path.splitext(img_path)[0]+zq_id+".txt"
    else:          #如果不加入标签信息只保存旋转后的坐标那么最开头的Add_label_information设置为False
        sava_txt=''
        for i in new_newpoints:
            for j in i:
                sava_txt+=str(j)+' '        #将坐标由列表转化为yolo的格式,中间分割由','变为' '

        dir_name=txt_save_folder+"/"+os.path.splitext(img_path)[0]+zq_id+".txt"

    fb = open(dir_name ,mode='w',encoding='utf-8')   #创建一个dir_name.txt的文本,
    fb.write(str(sava_txt))   # 写入变量sava_txt
    

放一下我的目录结构

images和labelTxt分别存放需要增强的图片和标签
这里我增强后的路径也写的这两个,增强后的图片和标签也保存在这两个文件夹里面
在这里插入图片描述
我的label文件是这样的,前面八个是四个点的坐标都一样
最后面我是两个标签,如果只有一个标签在代码里面改一下加入标签信息那里,注释有写
在这里插入图片描述

总结

人懒此处省略,有问题欢迎评论区,阿巴阿巴。。。。。。。。。。。。。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:42:53  更:2022-04-30 08:46:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:34:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码