2009. 1. 8. 19:49

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);