当我们进行目标检测训练时,需要对大量图片进行处理,此时代码就可以帮助我们实现。
目录
本文全为Python代码
一、图片路径信息写入------代码!
前提
1、确保你安装有Pycharm,或者是Visual Studio Code等类似的python编译平台。
2、有工程项目,或是新建一个工程项目,且配置有python虚拟环境或是Anaconda虚拟环境,(python和Anaconda 它们都是python解释器,只是Anaconda比python更强大。)
如图,这些你应该都知道,不然这些代码在哪里运行?
¥代码功能:将图片的路径信息写入到一个文本当中,如图文本n.txt中是一些路径信息。
----------------------------------用yolov7模型训练时,数据集那块儿会用到
***首先代码:支持的图片格式---------------------------------{".jpg", ".jpeg", ".png", ".gif", ".bmp"}
¥代码!!!
import os
# 设置需要遍历的文件夹路径
folder_path = "D:\pycharm-project\projectA\VOCX\images\\train"
# 打开一个新的txt文件,以写入的方式
with open("../n.txt", "w") as f:
# 遍历文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(folder_path):
# 遍历文件夹中的所有文件
for filename in files:
# 如果文件是以.jpg, .jpeg, .png等格式结尾的图片文件
if filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif", ".bmp")):
# 将文件名和相对路径写入到txt文件中
rel_path = os.path.relpath(os.path.join(root, filename), folder_path)
# 将路径中的反斜杠替换成正斜杠,并添加VOCA/images/train/前缀
rel_path = "D:/yolov7/VOCX/images/train/" + rel_path.replace("\\", "/")
f.write(rel_path + "\n")
# 关闭文件
f.close()
1、效果展示:
SSSS将路径下的所有图片(如图): D:\pycharm-project\projectA\VOCX\images\\train
SSS写入到名为 n.txt 的文本中,该文本如果没有,它会自动新建。
SS想要写入的内容(路径信息): D:/yolov7/VOCX/images/train/
真正的结果是D:/yolov7/VOCX/images/train/cahua001.jpg ,如下图
也就是说就算先写入内容为空,他也是cahua001.jpg ,见s图
少一个/,D:/yolov7/VOCX/images/train 就变成 D:/yolov7/VOCX/images/traincahua001.jpg
S写入结果如下图: 【你没有看错,我们在用Yolov7或者yolov8进行模型训练的时候会用到】
ss如果写入内容为空,即
rel_path = "" + rel_path.replace("\\", "/")
s结果为:
2、如何方便获得路径:(在工程里面就可以获得你的图片路径)
3、代码使用
新建一个python,任意命名。
复制粘贴改代码后,,只需要修改三个地方!
【1】 第一处:
folder_path = "D:\pycharm-project\projectA\VOCX\images\\train" #val是一个文件夹,该文件夹下放了500张图片。
改成 folder_path = " 你的图片路径(就是你图片存放的位置)" (它访问的是文件夹下所有的图片,指定到文件夹就行,不用指定到某个图片)
(最好把图片放在工程目录下,其实不管在其他C、D、F磁盘,应该都行,我没有试过)
【2】第二处:
with open("../n.txt", "w") as f:
这个是生成的txt文本的名字为 n.txt ,你也可任意改成其他的,例如:
注意:(该文本文件生成后会放在该代码所在目录下)
with open("../train.txt", "w") as f: #生成的文本名字为 train.txt
with open("../val.txt", "w") as f: #生成的文本名字为 val.txt
【3】第三处:
rel_path = "D:/yolov7/VOCX/images/train/" + rel_path.replace("\\", "/")
这个就是你想写入文本的内容了,我觉得这样的是最方便的!!需要写入什么就写入什么。
不会因为你图片的位置而改变!!!
二、图片格式转换代码
三、图片名称更换代码
四、标注格式转换代码
五、图片名称和对应标签更换代码
六、图片水平变换和垂直变换代码
七、索引更换代码
八、训练集验证集生成代码
代码持续更新中--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------