Как обесцветить изображение в Python?

Я просматривал код преобразования серых изображений в цветные изображения, но перед этим код преобразует входное изображение в ненасыщенное изображение с помощью данной строки кода:

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

Пожалуйста, помогите мне с проблемой, с которой я столкнулся.

Для чего нужны эти запятые?

gonczor 14.03.2018 14:52

Я понятия не имею, работает нормально для данного изображения, но вызывает вышеупомянутую ошибку для остальных.

Devendra Sharma 14.03.2018 15:00

Поскольку остальные являются законными 2D-массивами, к которым вы пытаетесь получить доступ с помощью 3D-индекса

Mad Physicist 14.03.2018 15:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
596
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Большая часть вашего кода будет работать с массивом 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 ранее в свой сценарий.

Другие вопросы по теме