У меня серое изображение, и я хочу преобразовать его в 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()
Попробовал GREY2RGB, но изображение не меняет. Где я ошибся?






Здесь есть фундаментальное недоразумение. Вы не можете удалить всю цветовую информацию, а затем волшебным образом воссоздать ее из ниоткуда.
Как только вы его удалите, он исчезнет.
Так для чего нужен GRAY2RGB? Он просто берет серый канал и реплицирует его в каналы R, G и B, поэтому у вас есть трехканальное изображение, но все 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 я не знаю, есть ли функция, но этого должно быть достаточно.
Но это как раз наоборот (вы писали про rgb в серый), просили серый в rgb.
Благодарю за разъяснение.