OpenCV 라이브러리는 3.0.0 버전부터 레이블링 함수를 제공합니다. OpenCV에서 레이블링을 수행하는 기본적인 함수 이름은 connectedComponents()이고, 이 함수의 원형은 다음과 같습니다.
int connectedComponents(InputArray image, OutputArray labels, int connectivity = 8, int ltype = CV_32S); |
|
• image |
입력 영상. CV_8UC1 또는 CV_8SC1 |
• labels |
출력 레이블 맵 행렬 |
• connectivity |
연결성. 8 또는 4를 지정할 수 있습니다. |
• ltype |
출력 행렬 타입. CV_32S 또는 CV_16S를 지정할 수 있습니다. |
• 반환값 |
레이블 개수. 반환값이 N이면 0부터 N-1까지의 레이블 번호가 존재하며, 이 중 0번 레이블은 배경을 나타냅니다. 실제 객체 개수는 N-1입니다. |
connectedComponents() 함수는 입력 영상 image에 대해 레이블링을 수행하여 구한 레이블 맵 labels를 반환합니다. connectedComponents() 함수의 입력 image에는 보통 threshold() 또는 adaptiveThreshold() 등 함수를 통해 얻은 이진 영상을 지정합니다. 회색이 포함된 그레이스케일 영상을 입력으로 사용할 경우, 픽셀 값이 0이 아니면 객체 픽셀로 간주합니다. labels 인자에는 Mat 자료형의 변수 이름을 전달합니다. connectedComponents() 함수는 네 개의 인자를 받을 수 있지만, 뒤쪽 두 개의 인자는 기본값을 가지고 있어서 생략할 수 있습니다.
connectedComponents() 함수 사용법과 동작 결과를 확인하기 위한 예제 코드를 코드 12-1에 나타냈습니다. 코드 12-1의 labeling_basic() 함수는 앞서 그림 12-2에서 사용했던 8×8 크기의 입력 영상을 실제로 생성하여 레이블링을 수행하고, 그 결과를 확인합니다. labeling_basic() 함수가 정의된 소스 코드 파일은 내려받은 예제 파일 중 ch10/labeling 프로젝트에서 확인할 수 있습니다.