더북(TheBook)

코드 12-4에서는 vector<Vec4i> 타입의 변수 hierarchyfindContours() 함수에 전달하여 외곽선 계층 정보를 추출합니다. findContours() 함수에서는 RETR_CCOMP 모드를 사용하여 2단계로 구성된 계층 구조가 만들어집니다. 코드 12-4에서 17행 for 문의 반복 조건을 주의 깊게 살펴보기 바랍니다. for 반복문에서 변수 idx의 초깃값은 0이고, idx = hierarchy[idx][0] 코드를 이용하여 idx 값이 갱신됩니다. 여기서 hierarchy[idx][0]idx번에 해당하는 외곽선의 다음 외곽선 번호를 가리킵니다. 만약 다음 외곽선 번호가 -1이 되어 idx >= 0 조건을 만족하지 않으면 for 반복문을 빠져나오게 됩니다. 19행에서 drawContours() 함수로 외곽선을 그릴 때에도 hierarchy 계층 정보를 전달하였습니다.

코드 12-4의 contours_hier() 함수 실행 결과를 그림 12-10에 나타냈습니다. 그림 12-10에서 src는 입력 영상으로 사용한 contours.bmp 파일이고, dst는 흰색 객체 외곽선을 임의의 색상으로 채워 그린 결과 영상입니다. 코드 12-4에서 17~20행의 for 문은 모두 3회 반복되므로 그림 12-10에서는 전체 세 가지 색상이 사용된 것을 볼 수 있습니다. drawContours() 함수에 외곽선 계층 정보 hierarchy 변수를 전달하였기 때문에 객체 바깥쪽 외곽선부터 안쪽 홀 외곽선까지 객체 영역만 지정된 색상으로 채워진 것을 확인할 수 있습니다.

▲ 그림 12-10 계층 구조를 사용하는 외곽선 검출과 그리기 예제 실행 결과

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