如何创建for循环以将特定图像从一个文件夹提取到另一个文件夹?

2024-09-27 18:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个名为sample_labels.csv的csv文件中有这个表 表中有图像索引和类标签,如下所示:

^{tb1}$

我还有一个文件夹,里面有图像。该文件夹称为“train_images”

我如何创建一个for循环,创建名为“Emphysima”、“No finding”、“Effusion”的文件夹,并将这些带有相应标签的图像存储在相应的文件夹中

我指的是“Emphysima”文件夹中带有肺气肿标签的两张图像,以此类推


Tags: 文件csvsampleno图像文件夹forlabels
1条回答
网友
1楼 · 发布于 2024-09-27 18:20:37

如果我理解您的要求,您可以按以下方式之一进行:

数据

import pandas as pd 

d = {
    'Image Index': 
        ['00000013_005.jpeg', '00000013_026.jpeg', 
         '00000017_001.jpeg', '00000042_002.jpg', 
         '00000084_000.jpg', '00000099_003.jpg'],
    
    'labels': 
        ['Emphysima', 'Emphysima', 
         'No finding', 'No finding', 
         'Effusion', 'Effusion']}

df = pd.DataFrame(data=d)
df.head()

         Image Index    labels
0   00000013_005.jpeg   Emphysima
1   00000013_026.jpeg   Emphysima
2   00000017_001.jpeg   No finding
3   00000042_002.jpg    No finding
4   00000084_000.jpg    Effusion

现在,根据你的需要,你可以试试这个

from pathlib import Path
from PIL import Image

# iterate over the unique label 
for item_name in df.labels.unique(): 
    
    # create folder according to the label name 
    item_folder = Path(f"{item_name}/")
    item_folder.mkdir(parents=True, exist_ok=True)
    
    # store id and gt for unique labels
    id = []
    gt = []
    
    # iterate over all possible number of unique labels 
    for id_label in df.loc[df['labels'] == item_name].values.tolist():
        # id_label :['image_id', 'label']
        id.append(id_label[0]) # image_id
        gt.append(id_label[1]) # label
        
        img = Image.open(id_label[0]) # read the image 
        img.save(f'{item_folder}/{id_label[0]}') # and save to target folder 
    
    # save the individual ground truth 
    # to the concern directory 
    label = pd.DataFrame({ 
            'Image Index': id,
            'labels': gt
        })
    label.to_csv(f'{item_folder}/{item_folder}.csv', index=False)

它将按labels名称创建一个目录,并将相应的映像保存到此目录,并仅使用它们的标签创建一个新的data frame

相关问题 更多 >

    热门问题