如何将文件中每个子文件中的.png文件转化为一个数据集,以子文件文件名字符串的最后一个字符作为类别名,进行样本平均化
时间: 2024-03-03 15:51:37 浏览: 107
你可以使用Python中的os、glob和PIL(Python Imaging Library)模块来实现这个任务。下面是一份可以实现你所要求的任务的代码,你可以参考一下:
``` python
import os
import glob
from PIL import Image
# 设置文件夹路径
folder_path = '/path/to/folder'
# 获取所有子文件夹
subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]
# 统计每个类别的样本数
class_count = {}
for subfolder in subfolders:
# 获取所有.png文件的路径
png_files = glob.glob(os.path.join(subfolder, '*.png'))
for file_path in png_files:
# 获取文件名并获取最后一个字符作为类别
file_name = os.path.basename(file_path)
class_name = file_name[-5]
# 统计样本数
if class_name in class_count:
class_count[class_name] += 1
else:
class_count[class_name] = 1
# 计算样本数平均值
total_count = sum(class_count.values())
average_count = int(total_count / len(class_count))
# 创建数据集文件夹
dataset_path = '/path/to/dataset'
if not os.path.exists(dataset_path):
os.makedirs(dataset_path)
# 将所有图片转化为数据集
for subfolder in subfolders:
# 获取所有.png文件的路径
png_files = glob.glob(os.path.join(subfolder, '*.png'))
for file_path in png_files:
# 获取文件名并获取最后一个字符作为类别
file_name = os.path.basename(file_path)
class_name = file_name[-5]
# 计算样本数量,如果大于平均值则跳过该样本
if class_count[class_name] > average_count:
continue
# 打开图片并保存到数据集文件夹中
img = Image.open(file_path)
save_path = os.path.join(dataset_path, class_name + '_' + file_name)
img.save(save_path)
```
这份代码首先获取文件夹中的所有子文件夹,然后遍历每个子文件夹中所有的.png文件,获取文件名并获取最后一个字符作为类别,根据类别统计样本数。接着,计算样本数的平均值并创建一个新的数据集文件夹。最后,将所有符合条件的图片转化为数据集并保存到数据集文件夹中。
阅读全文