Я просматривал код преобразования серых изображений в цветные изображения, но перед этим код преобразует входное изображение в ненасыщенное изображение с помощью данной строки кода:
def load_image(path):
img = imread(path)
# crop image from center
short_edge = min(img.shape[:2])
yy = int((img.shape[0] - short_edge) / 2)
xx = int((img.shape[1] - short_edge) / 2)
crop_img = img[yy : yy + short_edge, xx : xx + short_edge]
# resize to 224, 224
img = skimage.transform.resize(crop_img, (224, 224))
# desaturate image
return (img[:,:,0] + img[:,:,1] + img[:,:,2]) / 3.0
Я получаю ошибку в этой конкретной строке, ошибка читается как:
return (img[:,:,0] + img[:,:,1] + img[:,:,2]) / 3.0
IndexError: too many indices for array
Пожалуйста, помогите мне с проблемой, с которой я столкнулся.
Я понятия не имею, работает нормально для данного изображения, но вызывает вышеупомянутую ошибку для остальных.
Поскольку остальные являются законными 2D-массивами, к которым вы пытаетесь получить доступ с помощью 3D-индекса






Большая часть вашего кода будет работать с массивом 2D (оттенки серого) или 3D (RGB). Однако последняя строка явно требует 3D-массива. Вы можете добавить условие для прохождения через 2D-массивы, поскольку код просто усредняет каналы вместе:
if img.ndim < 3:
return img
# return average
В качестве альтернативы вы можете вызвать более информативную ошибку в начале функции, как только вы поймете, что у вас есть 2D-массив. Делайте то, что имеет смысл.
Это неправильный способ обесцветить изображение. Пожалуйста, используйте skimage.color.rgb2gray, который можно без проблем применить к 2D-изображениям (которые уже ненасыщены).
То есть измените последнюю строку на:
return color.rgb2gray(img)
и добавьте from skimage import color ранее в свой сценарий.
Для чего нужны эти запятые?