본문 바로가기

[ 프로그래밍 ]/강좌

OpenCV 강좌 05. 레이블링(Blob Labeling)

앞선 강좌에서는 OTSU 기법을 이용한 이진화 방법에 대해 알아보았다.
오늘은 이진화된 영상에서 각각의 컴포넌트들을 잘라낼 수 있는 레이블링에 대해 알아본다.

레이블링(Labeling)이란?
인접한 화소에 모두 같은 번호(Label)를 붙이고 연결되지 않은 다른 성분에는 다른 번호를 붙이는 일

1. 클래스 추가

2. 픽셀 방문 기록을 남길 구조체 및 각종 변수 선언

레이블링시 영상의 전체 픽셀을 검사하며 돌아다니게 되는데,
이 때, 해당 픽셀의 이전 방문 여부와 되돌아갈 곳의 위치를 저장하는 구조체를 선언한다.

또한 레이블링시 레이블이 저장될 이미지와 각 레이블의 정보가 담길 각각의 변수들을 선언한다.

3. 실제 레이블링 알고리즘의 구현
- 파라미터를 설정하고, DoLabeling() 함수를 실행함으로써 실제 레이블링 과정이 진행된다.

4. 알고리즘의 사용
- OnTimer 내부의 코드에 레이블링 관련 부분을 추가한다.

작성한 레이블링 알고리즘은 흰색(255의 값을 갖는 픽셀)을 Foreground로 판단하기 때문에,
앞서 이진화된 영상을 반전시킨다.

미리 작성해둔 레이블링 클래스를 이용 레이블링을 수행한 뒤,
각 레이블의 정보를 담고 있는 m_recBlobs 변수로 부터 각 레이블의 정보를 가져와
화면출력을 위해 만들어둔 이미지에 각각의 영역을 빨간색으로 표시한다.


5. 테스트 결과


다음장에서는 각 레이블의 크기 정보를 토대로 잡영을 걸러내고 원하는 레이블을 찾아가는 과정을 소개한다.