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 я не знаю, есть ли функция, но этого должно быть достаточно.