int connectedComponents(InputArray image, OutputArray labels,
int connectivity=8, int ltype=CV_32S);
image: (입력) 8비트 1채널 영상labels: (출력) 레이블링 결과 행렬. 레이블맵. Mat 객체connectivity: 4 또는 8ltype: 출력 영상 타입. CV_32S(int) 또는 CV_16S(short)반환값: 객체 개수. N을 반환하면 0 ~ (N-1) 사이의 레이블이 존재하며, 0은 배경을 의미 (실제 객체 개수는 N-1)
int connectedComponentsWithStats(InputArray image, OutputArray labels,
OutputArray stats, OutputArray centroids,
int connectivity=8, int ltype=CV_32S);
// 사용 예시
Mat labels, stats, centroids;
int cnt = connectedComponentsWithStats(src, labels, stats, centroids);
image: (입력) 8비트 1채널 영상labels: (출력) 레이블링 결과 행렬. 레이블맵. Mat 객체stats: (출력) 각 객체의 바운딩 박스, 픽셀 개수 정보를 담은 행렬 (CV_32SC1, N x 5)centroids: (출력) 각 객체의 무게 중심 위치 정보를 담은 행렬 (CV_64FC1, N x 2)connectivity: 4 또는 8ltype: 출력 영상 타입. CV_32S(int) 또는 CV_16S(short)반환값: 객체 개수. N을 반환하면 0 ~ (N-1) 사이의 레이블이 존재하며, 0은 배경을 의미 (실제 객체 개수는 N-1)
Point p;vector<Point> contour;vector<vector<Point>> contours;int findContours(InputArray image, OutputArray contours,
OutputArray hierarchy, int mode,
int method, Point offset=Point());
int findContours(InputArray image, OutputArray contours,
int mode, int method, Point offset=Point());
image: 입력 영상. non-zero 픽셀을 객체로 간주함contours: 검출된 외곽선 정보. vector<vector<Point>> 자료형hierarchy: 외곽선 계층 정보. vector<Vec4i> 자료형next, prev, child, parent 외곽선 인덱스를 가리킴mode: 외곽선 검출 모드, 다음 중 하나를 지정RETR_EXTERNAL: 바깥쪽 외곽선만 검출 (내부 객체 외곽선도 제외)RETR_LIST: 모든 외곽선을 1단계 계층으로 다 검출RETR_CCOMP: 2단계 계층 정보를 가지고 다 검출RETR_TREE: 모든 계층 정보 다 검출method: 외곽선 근사화 방법, 다음 중 하나를 지정CHAIN_APPROX_NONE: 근사화 없음, 즉 모든 외곽선 정보 다 저장, 대부분 이 옵션으로 사용CHAIN_APPROX_SIMPLE: 수직선, 수평선, 대각선에 대해 끝점만 저장, 메모리를 절약 할 수 있음offset: 좌표값 이동 옵셋int drawContours(InputArray image, OutputArray contours,
int contourIdx, const Scalar& color, int thickness=1,
int lineType=LINE_8, InputArray hierarchy=noArray(),
int maxLevel=INT_MAX, Point offset=Point());
image: 입력 영상. non-zero 픽셀을 객체로 간주함contours: 외곽선 정보. vector<vector<Point>> 자료형contourIdx: 외곽선 인덱스,contourIdx=-1 이면 모두 그림color: 외곽선 색상thickness: 외곽선 두께,thickness < 0 이면 내부를 채움lineType: 선 종류, LINE_4, LINE_8, LINE_AA 중 하나hierarchy: findContours() 함수에서 구한 외곽선 계층 정보noArray() 또는 Mat() 지정maxLevel: 그리기를 수행할 최대 외곽선 레벨maxLevel=0 이면 contourIdx 외곽선만 그림INT_MAX 이면 모든 외곽선을 그림offset: 좌표 값 이동 옵셋| function name | description |
|---|---|
| arcLength() | 외곽선 길이를 반환 |
| contourArea() | 외곽선이 감싸는 영역의 면적을 반환 |
| boundingRect() | 주어진 점을 감싸는 최소 크기 사각형(bounding box) 반환 |
| minEnclosingCircle() | 주어진 점을 감싸는 최소 크기 원을 반환 |
| minAreaRect() | 주어진 점을 감싸는 최소 크기 회전된 사각형을 반환 |
| minEnclosingTriangle() | 주어진 점을 감싸는 최소 크기 삼각형을 반환 |
| approxPolyDP() | 외곽선을 근사화(단순화) |
| fitEllipse() | 주어진 점에 적합한 타원을 반환 |
| fitLine() | 직선 모양일 경우, 주어진 점에 적합한 직선을 반환 |
| isContourConvex() | 컨벡스인지를 검사 |
| convexHull() | 주어진 점으로부터 컨벡스 헐을 반환 |
| convexityDefects() | 주어진 점과 컨벡스 헐로부터 컨벡스 디펙트(볼록하게 만들기 위해 추가한 부분)를 반환 |
approxPolyDP() 함수를 통해 return을 받으면, 꼭지점을 확인해 주는데, 이 때 return=3 이면 삼각형, return=4 이면 사각형으로 도형을 판별할 수 있다.