더북(TheBook)

findContours() 함수에서 외곽선 검출 모드를 어떻게 지정하는지에 따라 검출되는 외곽선과 계층 구조가 서로 달라집니다. 네 가지 외곽선 검출 모드에 따른 외곽선 검출 결과와 계층 구조를 그림 12-8에 나타냈습니다. 그림 12-8에서 원 안에 쓰여진 숫자는 그림 12-7에 나타난 외곽선 번호를 나타내며, 각 외곽선 번호 사이에 연결된 화살표는 계층 구조를 나타냅니다. 화살표가 오른쪽 외곽선 번호를 가리키면 다음 외곽선을 나타내고, 화살표가 왼쪽 외곽선 번호를 가리키면 이전 외곽선을 나타냅니다. 화살표가 아래쪽을 가리키면 자식 외곽선을 나타내고, 화살표가 위쪽을 가리키면 부모 외곽선을 나타냅니다.

findContours() 함수에서 RETR_EXTERNAL 외곽선 검출 모드를 사용하면 흰색 객체의 바깥쪽 외곽선만 검출합니다. 이 경우 객체 내부의 홀 외곽선은 검출되지 않습니다. 또한 큰 객체 내부에 있는 작은 객체의 외곽선도 검출되지 않습니다. 그러므로 그림 12-7의 테스트 영상에서 RETR_EXTERNAL 모드로 외곽선을 검출하면 0번과 4번 외곽선만 검출됩니다. RETR_LIST 검출 모드를 사용하면 바깥쪽과 안쪽 홀 외곽선을 모두 검출합니다. RETR_EXTERNAL 또는 RETR_LIST 모드를 사용할 경우, 외곽선의 부모/자식 계층 정보는 생성되지 않습니다. 외곽선 검출 모드를 RETR_CCOMP로 설정하면 모든 흰색 객체의 바깥쪽 외곽선을 먼저 검출하고, 각 객체 안의 홀 외곽선을 자식 외곽선으로 설정합니다. 그러므로 RETR_CCOMP 모드에서는 상하 계층이 최대 두 개 층으로만 구성됩니다. 만약 흰색 객체에 여러 개의 홀이 존재할 경우, 그중 하나만 자식 외곽선으로 설정됩니다. 그리고 각각의 홀 외곽선은 객체 바깥쪽 외곽선을 모두 부모 외곽선으로 설정합니다. 외곽선 검출 모드를 RETR_TREE로 설정하면 외곽선 전체의 계층 구조를 생성합니다. 만약 객체 내부에 홀이 있고, 그 홀 안에 또 다른 작은 객체가 있다면 작은 객체의 외곽선은 홀 외곽선의 자식으로 설정됩니다.

▲ 그림 12-8 외곽선 검출 모드에 따른 계층 구조

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