Open cv 2 не будет читать изображения из более чем 1 папки? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь создать свой собственный набор данных из изображений и имею 2 категории. Когда я использую код, в массиве остается только 1 папка с изображениями. 2-я запись. Данные изображения не могут быть преобразованы в плавающее. Что я делаю не так?

import os
import cv2
import numpy as np
import matplotlib.pyplot as plt

Datadir= 'D:\\mml\\malariya\\'
Categories = ['parazitesone', 'uninfectedone']

for category in Categories:
    path = os.path.join(Datadir, category)
    for img in os.listdir(path):
        img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE)
        plt.imshow(img_array, cmap='gray')
        plt.show()

1 Ответ

0 голосов
/ 13 апреля 2019

TypeError: Image data cannot be converted to float является дубликатом этого вопроса . Возможно, проблема в том, что вы пытаетесь загрузить недопустимое изображение. os.listdir() также возвращает каталоги, которые возвращают None из imread, что приводит к TypeError.

Я бы рекомендовал проверить, является ли img файлом, и, если вы ожидаете, что ваши изображения будут в заданном наборе расширений, проверьте и это. Это будет выглядеть так:

import numpy as np
import matplotlib.pyplot as plt
import cv2
import os

Datadir= 'D:\\mml\\malariya\\'
Categories = ['parazitesone', 'uninfectedone']

for category in Categories:
    path = os.path.join(Datadir, category)
    for img in os.listdir(path):
        img_fname = os.path.join(path, img)
        # check if is file
        if not os.path.isfile(img_fname):
            print('Skipping: {}'.format(img_fname))
            continue
        # or check for extensions
        if not any([img_fname.endswith(e) for e in ['.png', '.jpg']]):
            print('This file has an unsupported extension: {}'.format(img_fname))
            continue
        img_array = cv2.imread(os.path.join(path, img), cv2.IMREAD_GRAYSCALE)
        # or check if the return is None
        if img_array is None:
            print('This image could not be loaded: {}'.format(img_fname))
            continue
        plt.imshow(img_array, cmap='gray')
        plt.show()

Конечно, вам не нужно использовать все эти if. Выберите тот, который соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...