Я столкнулся с этим API cv2.COLOR_GRAY2RGB. Я нахожу это странным, потому что не должно быть никакого способа преобразовать изображение в оттенках серого в изображение RGB. Итак, я попробовал что-то вроде этого: Я взял изображение, подобное этому:
Изображение показано с помощью plt.imshow (img) (с аргументами по умолчанию) ). Затем я конвертирую его в оттенки серого с помощью cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) и получаю это:
Я знаю, что оно не выглядит серым -scale ищет потому, что imshow () по умолчанию не отображает серое изображение (я думаю, больше похоже на тепловую карту). Поэтому я использовал cv2.cvtColor (img, cv2.COLOR_GRAY2RGB) и получил это:
Он выглядит серым для глаз, несмотря на то, что теперь у него три канала , Итак, я пришел к выводу, что cv2.COLOR_GRAY2RGB - это обходной вариант для отображения полутонового изображения в оттенках серого без изменения настроек imshow ().
Теперь мой вопрос заключается в том, когда я использую cv2.cvtColor ( img, cv2.COLOR_BGR2GRAY) снова, чтобы преобразовать это трехканальное серое изображение обратно в один канал, значение пикселя точно такое же, как в первый раз, когда я преобразовал исходное изображение в один канал с помощью cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) :
Другими словами, cv2.COLOR_BGR2GRAY может выполнять сопоставление «многие к одному». Интересно, как это возможно?