더북(TheBook)

OpenCV에서 영상 내부 객체들의 외곽선을 검출하는 함수 이름은 findContours()입니다. 이 함수는 외곽선들의 계층 정보를 받아 오는 hierarchy 인자가 있는 형태와 없는 형태 두 가지로 정의되어 있습니다. findContours() 함수 원형은 다음과 같습니다.

void findContours(InputArray image, OutputArrayOfArrays contours,
                  OutputArray hierarchy, int mode,
                  int method, Point offset = Point());
void findContours(InputArray image, OutputArrayOfArrays contours,
                  int mode, int method, Point offset = Point());

image

입력 영상. 8비트 1채널 영상이어야 하고, 0이 아닌 픽셀을 객체로 취급합니다. 만약 mode가 RETR_CCOMP이면 CV_32SC1 타입의 영상을 지정할 수 있습니다.

contours

검출된 외곽선 정보. vector<vector<Point>> 타입의 변수를 지정합니다.

hierarchy

외곽선 계층 정보. vector<Vec4i> 타입의 변수를 지정합니다.

mode

외곽선 검출 모드. RetrievalModes 열거형 상수를 지정합니다.

method

외곽선 근사화 방법. ContourApproximationModes 열거형 상수를 지정합니다.

offset

외곽선 점 좌표의 오프셋(이동 변위)

 

findContours() 함수의 입력 영상으로는 보통 threshold() 등 함수에 의해 만들어진 이진 영상을 사용합니다. 실제 동작할 때는 입력 영상에서 픽셀 값이 0이 아니면 객체로 간주하여 외곽선을 검출합니다. contours 인자에는 검출된 외곽선 좌표 정보가 저장되고, 보통 vector<vector<Point>> 타입의 변수를 지정합니다. hierarchy 인자에는 검출된 외곽선의 계층 정보가 저장되고, 보통 vector<Vec4i> 타입의 변수를 지정합니다. Vec4i 클래스는 int 자료형 네 개를 저장할 수 있는 OpenCV 벡터 클래스입니다. i번째 외곽선에 대해 hierarchy[i][0]에는 다음 외곽선 번호, hierarchy[i][1]에는 이전 외곽선 번호, hierarchy[i][2]에는 자식 외곽선 번호, hierarchy[i][3]에는 부모 외곽선 번호가 저장됩니다. 만약 계층 구조에서 해당 외곽선이 존재하지 않으면 -1이 저장됩니다.

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