前言
笔者在使用labelme标注完数据且修改为json_to_dataset.py文件后执行json_to_dataset.exe生成了许多文件夹,如图1
而每个小文件夹又包含了关于原图的png文件以及掩码图片label.png
笔者想要生成的是VOCdevkit数据集,需要将原图放进JPEGImages文件以及将掩码图片放入SegmentationClass文件。
显然不可能手动点开一个个文件夹将图片拉出来,然后就写了份代码将这些文件夹下指定的同样名字的图片提取出来(虽然网上应该挺多了 哈哈哈 但是自己写的用的心里上顺手)
代码如下:
import os
import shutil
# 定义源文件夹和目标文件夹路径
source_folder = 'C:/Users/Administrator/Desktop/output'
#输出的路径
target_folder = 'C:/Users/Administrator/Desktop/img'
# 如果目标文件夹不存在,则创建它
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历源文件夹中的所有子文件夹
#输入源文件夹中的子文件夹个数 +1 或者使用函数读取出包含的子文件个数+1
for i in range(1, 278):
# 构建子文件夹名称和标签文件名
#子文件夹名称 例如1_json
subfolder_name = f'{i}_json'
#输入想要提取的文件或者图片名称
label_file_name = 'label.png'
label_file_path = os.path.join(source_folder, subfolder_name, label_file_name)
# 如果标签文件存在,则读取它并重命名图片
if os.path.exists(label_file_path):
with open(label_file_path, 'rb') as f:
content = f.read()
# 将图片内容写入新的文件中,并重命名新文件为原文件名加上数字后缀的形式
#如1.png 2.png等等
new_file_name = f'{i}.png'
new_file_path = os.path.join(target_folder, new_file_name)
with open(new_file_path, 'wb') as f:
f.write(content)
# 删除原始标签文件 使用这个函数之后会删除源文件中的想要提取的图片或者文件 慎用!
# os.remove(label_file_path)
print('Done!')
直接上代码:
import os
import shutil
# 定义源文件夹和目标文件夹路径
source_folder = 'C:/Users/Administrator/Desktop/img'
target_folder = 'C:/Users/Administrator/Desktop/JPEGImages'
# 如果目标文件夹不存在,则创建它
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历源文件夹下的所有文件
for filename in os.listdir(source_folder):
# 如果文件是。jpg格式,则将其复制到目标文件夹中
if filename.endswith('.jpg'):
old_file_path = os.path.join(source_folder, filename)
new_file_path = os.path.join(target_folder, filename)
shutil.copy(old_file_path, new_file_path)
可以实现将png与jpg图片的互转哦
import os
import cv2
# 定义文件夹路径和文件后缀名
folder_path = 'C:/Users/Administrator/Desktop/png'
file_suffix = '.png'
# 遍历文件夹下的所有文件
for filename in os.listdir(folder_path):
# 如果文件是图片,则将其后缀名改为.jpg
if filename.endswith(file_suffix):
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, filename[:-4] + '.jpg')
#如果不知道filename[:-4] 输出的是啥 不妨print一下吧
# 读取图片数据并保存为新的.jpg格式
img = cv2.imread(old_file_path)
cv2.imwrite(new_file_path, img)
#删除png图片
os.remove(old_file_path)