BGR2HSV와 HSV2BGR
HSV 색 모델은 색상(hue), 채도(saturation), 명도(value)로 색을 표현하는 방식입니다. 색상은 빨간색, 노란색, 녹색과 같은 색의 종류를 의미합니다. 채도는 색의 순도를 나타냅니다. 즉, 빨간색에 대하여 채도가 높으면 맑은 선홍색이고, 채도가 낮으면 탁한 빨간색으로 보이게 됩니다. 명도는 빛의 세기를 나타냅니다. 명도가 높으면 밝고, 명도가 낮으면 어둡게 느껴집니다.
HSV 색 공간은 그림 10-2와 같이 원뿔 모양으로 표현할 수 있습니다. HSV 색 공간 모형에서 색상은 원뿔을 가로로 잘랐을 때 나타나는 원형에서 각도로 정의됩니다. 각도가 0°에 해당할 때 빨간색을 나타내고, 각도가 증가할수록 노란색, 녹색, 하늘색, 파란색, 보라색을 거쳐 각도가 360°에 가까워지면 다시 빨간색으로 표현됩니다. 채도는 원뿔을 가로로 잘랐을 때 나타나는 원 모양의 중심에서 최솟값을 갖고, 원의 중심에서 방사형으로 멀어지는 방향으로 값이 증가합니다. 명도는 원뿔 아래쪽 꼭지점에서 최솟값을 갖고 원뿔의 축을 따라 올라가면서 증가합니다.
▲ 그림 10-2 원뿔 모양의 HSV 색 공간 모형2
OpenCV에서 BGR2HSV 색 공간 변환 코드를 이용하여 8비트 BGR 영상을 HSV 영상으로 변환할 경우, H 값은 0부터 179 사이의 정수로 표현되고, S와 V는 0부터 255 사이의 정수로 표현합니다. 색상 값은 보통 0°부터 360° 사이의 각도로 표현하지만, uchar 자료형으로는 256 이상의 정수를 표현할 수 없기 때문에 OpenCV에서는 각도를 2로 나눈 값을 H 성분으로 저장합니다. 만약 cvtColor() 함수의 입력 BGR 영상이 0에서 1 사이 값으로 정규화된 CV_32FC3 타입의 행렬이라면, H 값은 0에서 360 사이의 실수로 표현되고 S와 V는 0에서 1 사이의 실수 값으로 표현됩니다.