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
. Выберите тот, который соответствует вашим потребностям.