Python如何根据one-hot编码值将图片拆分存入对应类别文件夹
具体实现方法
你已经完成了CSV读取与图片路径映射的部分,只需要补全目录创建、逐行匹配标签、文件存储的逻辑即可,完整可运行代码如下:
import os import shutil import pandas as pd from glob import glob # 你原有已编写的逻辑 df = pd.read_csv('/GroundTruth.csv') image_path = {os.path.splitext(os.path.basename(x))[0]: x for x in glob(os.path.join('data/', '*', '*.png'))} df['path'] = df['image'].map(image_path.get) # 以下为分类存储的实现逻辑 # 分类后图片的存储根目录,可根据自己的需求修改路径 save_root = "category_images" # one-hot格式对应的类别列名 class_list = ["A", "B", "C"] # 提前创建A、B、C三个类别子目录,目录已存在时不触发报错 for cls_name in class_list: os.makedirs(os.path.join(save_root, cls_name), exist_ok=True) # 逐行处理每张图片 for _, row in df.iterrows(): current_img_path = row["path"] # 跳过路径匹配失败、本地不存在的无效图片条目 if not pd.notna(current_img_path) or not os.path.exists(current_img_path): continue # 提取当前图片所有标注为1的类别,兼容单标签、多标签两种场景 match_classes = [col for col in class_list if row[col] == 1] # 将图片写入对应类别文件夹 for cls in match_classes: target_save_path = os.path.join(save_root, cls, os.path.basename(current_img_path)) # 要保留原文件用shutil.copy,要直接移动原文件就替换为shutil.move shutil.copy(current_img_path, target_save_path)
- 代码默认执行复制操作,不会修改
data目录下的原始图片,如果需要直接移动原文件到分类目录,把shutil.copy替换为shutil.move即可 - 代码自动兼容多标签场景,如果某张图片同时在多个标签列标记为1,会自动复制到所有匹配的类别文件夹中
内容的提问来源于stack exchange,提问作者Sasmita
相关产品推荐
相关产品推荐

