语义分割训练数据集之提取文件夹下的图片、修改文件夹下的图片属性

前言
笔者在使用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图片

可以实现将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)

猜你喜欢

转载自blog.csdn.net/weixin_44598554/article/details/131455327