#python-3.x #opencv #color-space
#python-3.x #opencv #цветовое пространство
Вопрос:
Я использую OpenCV для преобразования цветового пространства. Мне было интересно, даст ли преобразование RGB в HSV и преобразование BGR в HSV одинаковый результат?
cv2.cvtColor(np.float32(img),cv2.COLOR_BGR2HSV) # BGR to HSV
Поскольку, согласно моему предположению, единственное различие между RGB и BGR — это сдвиг в каналах, то при преобразовании RGB в HSV разве это не то же самое, что преобразование BGR в HSV?
Комментарии:
1. Выбрав
BGR2HSV
илиRGB2HSV
, вы сообщаете OpenCV, в каком порядке находятся каналы. Например, OpenCV самостоятельно не знает, какой канал являетсяB
каналом.2. Моим требованием является создание изображений HSV из RGB с помощью этой строки кода cv2.cvtColor (np.float32(img),cv2.COLOR_RGB2HSV). Дает ли это мне правильную насыщенность и оттенок?
Ответ №1:
они не будут одинаковыми. BGR — это не RGB. порядок каналов меняется на противоположный.
неправильный тип преобразования даст бессмысленные значения оттенка. правильный тип преобразования даст одинаковые значения оттенка.
Насыщенность и значение будут одинаковыми в силу модели HSV, не учитывающей различную яркость основных цветов.
Комментарии:
1. спасибо, итак, BGR и RGB дадут мне два разных значения оттенка, но два других канала будут одинаковыми? Opencv учитывает порядок BGR, так же как и cv2.cvtColor(img,cv2.COLOR_RGB2HSV) дает мне преобразование RGB в HSV?
2. Я поместил его в transform.compose. Итак, изображения Intpu являются изображениями PIL.
3. Изображения PIL обычно имеют порядок RGB. преобразуйте в массив numpy, который также будет иметь порядок RGB, затем используйте cvtColor с RGB2HSV, потому что это тот порядок каналов, который у вас есть.