라벨링(Labeling)
영상이나 이미지에서 인접한 화소들을 묶어 하나의 객체로 판단하는 방식입니다.
즉, 인접한(연결된) 화소끼리 같은 번호를 부여
합니다.
여러 물체를 구분하기 위해서 사용합니다.
라벨링
또는 레이블링
이라 부릅니다.
원본(Source, src)
은 영상이나 이미지를 사용합니다.
클래스 코드
세부 코드
CvBlobs
함수를 사용하기 위해서는 네임스페이스에 using OpenCvSharp.Blob;
를 선언해야 사용할 수 있습니다.
bin
는 라벨링
에 사용될 이미지입니다. 이 이미지를 통하여 라벨링을 진행합니다. 라벨링은 이진화 이미지를 사용
합니다.
CvBlobs blobs = new CvBlobs();
을 이용하여 라벨링을 하기 위해 생성자
를 만듭니다.
blobs.Label(bin);
를 통하여 라벨링
을 진행합니다. 이진화 이미지
를 사용합니다.
blobs.RenderBlobs(원본, 결과);
를 통하여 라벨링
결과를 확인할 수 있습니다.
foreach
문을 이용하여 라벨링
정보를 확인할 수 있습니다. item
값을 이용하여 라벨링 정보를 확인 가능합니다.
아래의 목록을 foreach
문에 사이에 삽입하여 라벨링 번호에 따른 데이터를 확인 할 수 있습니다.
- 라벨링 번호 : b.Label
- 중심점 : b.Centroid
- 면적(moment 00) : b.Area
- 등고선 각도 : b.Angle() / Math.PI * 180
- 사각형 정보 : b.Rect
- 라벨링의 시작 위치 : b.Contour.StartingPoint
라벨링 부여 방식
라벨링은 좌측 상단부터 우측 상단방향
으로 이동해가면서 파악합니다.
가장 첫 줄의 파악이 끝나면 다음 줄 좌측 부터 우측방향으로 마지막 픽셀까지 파악합니다.
파악 중 가장 처음 만나는 픽셀이 라벨링 번호 1번이며 그 픽셀과 인접한 픽셀들을 모두 같은 번호를 부여
하게됩니다.
위의 이미지에서 하얀색 원이 라벨링이 부여되는 시작 위치입니다.
좌측 상단부터 시작하면 076923
의 이미지에서 0
을 가장 처음 만나게 되고, 다음은 7
이 아닌 6
을 만나게 됩니다.
이후, 순서대로 923
을 만나게 되며 마지막으로 7
을 만나게 됩니다. 즉 라벨링 순서는 069237
이 되게됩니다.
위의 이미지에서 붉은 색으로 된 라벨링 번호를 확인 할 수 있습니다.
출력 결과
댓글 남기기