Python: выполнить серое изображение в RGB

У меня есть серое изображение, и я хочу преобразовать его в RGB. Как я буду делать это в OpenCV?

image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow('Grey Scale Image', image)
cv2.waitKey()


backtorgb = cv2.cvtColor(image,cv2.COLOR_GRAY2RGB)
cv2.imshow('GRAY2RGB Image', backtorgb)
cv2.waitKey()

Я пробовал GRAY2RGB, но это не меняет изображение. Где я неправ?

2 ответа

Решение

Здесь есть фундаментальное недоразумение. Вы не можете удалить всю информацию о цвете, а затем волшебным образом воссоздать ее из ниоткуда.

Как только вы удалите его, его больше нет.

Так что же GRAY2RGB за? Он просто берет серый канал и копирует его в каналы R, G и B, так что у вас есть 3-канальное изображение, но все 3 одинаковы, следовательно, оно выглядит серым.

Есть и другие способы сделать это, вам не нужен openCV, в конце концов, изображение представляет собой матрицу, и вы можете сделать это с умножением, посмотрите на этот пост: Как я могу преобразовать изображение RGB в оттенки серого в Python?

РЕДАКТИРОВАТЬ: Предоставление решения в случае изменения ссылки.

Изображение можно рассматривать как 3 матрицы: одну для красного, одну для зеленого и одну для синего, три цвета канала RGB, каждый с информацией для каждого пикселя в диапазоне от 0 до 255. Чтобы преобразовать его в изображение в оттенках серого, оно Необходимо суммировать все цвета путем представления их светимости, которая является коэффициентом, уже известным полученным в системе управления:

def rgb2gray(rgb):
    r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
    gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
    return gray

В openCV я не знаю, есть ли функция, но этого должно быть достаточно.

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