Ну так ты загружаешь изображение как серое, потому получаешь одноканальный выхлоп, т.е. двумерный массив яркости пикселей вида высота х ширина. Если бы загружал цветное изображение, у тебя было бы три индекса - высота, ширина, канал.
Либо грузи изображение как цветное, либо создавай массив вида высота х ширина х 3 и впиши в него свой исходный массив, в каждый канал.
Подробнее не подскажу потому что хз что за структура данных используется - numpy массив, или питоновский array, или ещё что.
JRBRO, ну для начала, выясни, что же такое тебе возвращает функция io.imread(). Либо найди документацию на используемую библиотеку, либо экспериментально:
У тебя скорее всего будет выведено или <class 'numpy.ndarray'> или <class 'array.array'>, хотя может и что-то другое. Если первое - находи туториал по работе с numpy и изучи его (numpy - это очень мощная штука, но требует изучения). Если второе - то используется встроенный модуль array, читай про него в справке.
JRBRO, тогда тебе повезло, numpy позволяет очень лаконично работать с массивами.
Например, так:
import numpy
image = io.imread(...........тут параметры...........)
# shape - это форма массива, т.е. его размер по разным осям.
print(image.shape) #выведет (H, W) где H и W - высота и ширина изображения
#повторяем яркость три раза (три канала, RGB), получаем как бы цветное изображение (по факту все равно серое).
color_image = numpy.stack((image, image, image), axis=-1) # делаем "стопку" из трёх копий массива image
print(color_image.shape) #выведет (H, W, 3)
JRBRO, погоди, тогда у тебя должно было всё сработать уже при as_gray=False. Он бы тебе дал массив как раз правильной формы (один канал ты бы обрезал индексацией [:,:,:3]). И stack не потребовался бы.