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 이면 사각형으로 도형을 판별할 수 있다.