Читать несколько изображений и меток в python - PullRequest
0 голосов
/ 19 января 2020

У меня есть набор данных, который состоит из 100 папок, и каждая из папок содержит несколько изображений, как показано ниже. Как мне прочитать эти изображения и метки, чтобы, если я назову метку папки, в ней будет коллекция изображений? (например, если я назову метку Cat, она будет состоять из img_001 и img_032, а не просто img_001 или img_032). Я попытался использовать словарь в качестве кода ниже, но словарь берет только первое изображение из каждой папки, в то время как я хочу взять все изображения. Как это сделать? Спасибо

(Folder Structure)
Cat:
 -img_001.jpg
 -img_032.jpg
Dog:
 -img_002.jpg
 -img_012.jpg
 -img_011.jpg
 -img_000.jpg
Bird:
 -img_003.jpg
... until 100 folders
(My code)
path = 'animal/'
img_dict = dict()

for root, dirs, files in os.walk(path):
    print(os.path.basename(root))
    my_key = os.path.basename(root)

    for file_ in files:
        full_file_path = os.path.join(root, file_)
        img = cv2.imread(full_file_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img_dict[my_key] = img
(Output using my code with only one images per labels)
Cat:
 -img_001.jpg
Dog:
 -img_002.jpg
Bird:
 -img_003.jpg
... until end of dictionary (100 labels)

1 Ответ

0 голосов
/ 19 января 2020

Вы используете имя папки в качестве ключа для словаря. Для хранения нескольких файлов в этом случае вы должны использовать тип списка в качестве значения. Используя [] как литерал для создания списка и метод append () для добавления значения в список, попробуйте сделать так:

path = 'animal/'
img_dict = dict()

for root, dirs, files in os.walk(path):
    print(os.path.basename(root))
    my_key = os.path.basename(root)

    dir_images = []
    for file_ in files:
        full_file_path = os.path.join(root, file_)
        img = cv2.imread(full_file_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        dir_images.append(img)

    img_dict[my_key] = dir_images
...