더북(TheBook)

10.2.2 색상 범위 지정에 의한 영역 분할

컬러 영상을 다루는 응용에서 자주 요구되는 기법은 특정 색상 영역을 추출하는 작업입니다. 예를 들어 입력 영상에서 빨간색 픽셀을 모두 찾아내면 빨간색 객체의 위치와 크기를 알 수 있습니다. 컬러 영상에서 빨간색, 파란색 등의 대표적인 색상 영역을 구분할 때에는 RGB 색 공간보다 HSV 등의 색상(H) 정보가 따로 설정되어 있는 색 공간을 사용하는 것이 유리합니다. 예를 들어 HSV 색 공간에서 녹색은 H 값이 60 근방으로 표현되기 때문에 H 값이 60에 가까운지를 조사하여 녹색 픽셀을 찾아낼 수 있습니다.

OpenCV에서 행렬의 원소 값이 특정 범위 안에 있는지 확인하려면 inRange() 함수를 사용할 수 있습니다. inRange() 함수 원형은 다음과 같습니다.

void inRange(InputArray src, InputArray lowerb,
             InputArray upperb, OutputArray dst);

src

입력 영상

lowerb

하한 값. 주로 Mat 또는 Scalar 객체를 지정합니다.

upperb

상한 값. 주로 Mat 또는 Scalar 객체를 지정합니다.

dst

출력 마스크 영상. 입력 영상과 크기가 같고, 타입은 CV_8UC1입니다.

 

inRange() 함수는 입력 영상 src의 픽셀 값이 지정한 밝기 또는 색상 범위에 포함되어 있으면 흰색, 그렇지 않으면 검은색으로 채워진 마스크 영상 dst를 반환합니다. 입력 영상 src에는 그레이스케일 영상 같은 1채널 행렬과 컬러 영상 같은 다채널 행렬을 모두 지정할 수 있습니다. 만약 그레이스케일 영상을 입력 영상으로 사용할 경우, 특정 밝기 값 범위에 있는 픽셀 영역을 추출할 수 있습니다. 1채널 영상에 대해 inRange() 함수의 동작을 수식으로 표현하면 다음과 같습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.