cvFindContours
cvFindContours 함수는 이미지에서 contour를 찾은 후 contour의 갯수를 리턴
원형
int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq* first_contour,
int header_size=sizeof(CvContour), int mode, int mthod, CvPoint offset=cvPoint(0,0) );
패러미터
- image : 8비트 grayscale 영상만을 패러미터로 넘길 수 있다. 0이 아닌 픽셀은 1로, 0인 픽셀은 0으로 간주하여 자체적으로 2진 영상으로 처리하게 된다.
- storage : CvMemStorage 구조체의 포인터를 넘긴다. 실제로 contour 정보가 저장되는 공간이다.
- first_contour : 첫번째 최외곽 contour의 정보를 저장할 CvSeq 구조체의 포인터
- header_size : 시퀀스 헤더의 크기 ex) sizeof(CvContour)
- mode : contour 검출 방법
CV_RETR_EXTERNAL - 오직 최외곽 contour만을 검출한다.
CV_RETR_LIST - 모든 contour를 검출하여 list로 저장한다.
CV_RETR_CCOMP - 모든 contour를 검출한 후 2단계로 계층화한다.
상위 계층은 각 성분(component)의 외곽 경계를 나타내며 하위 계층은 성분 내부의
구멍(hole)을 나타낸다.
CV_RETR_TREE - 모든 contour를 검출한 후 각 contour를 tree 형태로 구조화한다.
- moethod : approximation(생략산) 방법이다.
생략산이란 불필요한 연산량을 줄이기 위하여 모든 contour를 구하지 않고 추정
CV_CHAIN_CODE - Freeman chain code를 사용하여 contour를 출력한다. 이것 외의 다른 모든 방법은
결과물을 polygon(다각형, 버텍스의 나열)로 출력한다.
CV_CHAIN_APPROX_NONE - 모든 contour의 점을 chain code에서 point로 변환한다.
CV_CHAIN_APPROX_SIMPLE - 가로, 세로, 대각선 으로 쪼개서 압축하며 함수는 끝점만을 출력한다.
CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS - Teh-Chin chain approximation
알고리즘에 사용된다.
CV_LINK_RUNS - 1의 수평 구획의 연결을 통해 완전히 다른 방식의 contour 검출 알고리즘을 사용한다.
CV_RETR_LIST 모드에서만 사용 가능하다.
- offset : 모든 contour 포인트 이동
예제
CvMemStorage* storage = cvCreateStorage(0); // 배열 자료형 : 점의 좌표가 들어감
CvSeq* seq = NULL; //경계 개수를 저장할 변수 선언
int numContour = cvFindContours(src, storage, &seq, sizeof(CvContour), CV_RETR_TREE,
CV_CHAIN_APPROX_SIMPLE);