//윤곽선 구하기
void findContours( InputOutputArray image, OutputArrayOfArrays contours,
OutputArray hierarchy, int mode,
int method, Point offset=Point());
모드 종류 설명
CV_RETR_EXTERNAL = 맨 바깥의 외곽만 검출, 내부의 공백은 무시됨
CV_RETR_LIST = 외곽 검색 결과를 일련의 리스트로 관리, 계층구조는 의미 없음
CV_RETR_CCOMP = 외곽 검색 결과를 2계층으로 나누어 관리, 1층=바깥선, 2층=안선
V_RETR_TREE = 외곽 검색 결과를 트리구조로 관리, 루트=최외곽선
//코드
int Test_Conture()
{
Mat src = imread( "..\\mask-1.png", 1 ), gray, temp, mask;
if( src.empty()) return 0;
cvtColor( src, mask, COLOR_BGR2GRAY); //단색으로 변환
//차영상 골라내기(필터링, 노이즈 제거)
int niters = 3;//반복 횟수
dilate(mask, temp, Mat(), Point(-1,-1), niters);//팽창, 밝은 영역 확장
erode(temp, temp, Mat(), Point(-1,-1), niters*2);//침식, 노이즈 제거
dilate(temp, temp, Mat(), Point(-1,-1), niters);//다시 팽창
threshold(temp, temp, 200, 256, CV_THRESH_BINARY);//회색(그림자) 지우기
//단색 이미지만 가능, 주의! 입력된 영상(temp)도 변경된다.
vector<vector<Point> > contours; //외곽선 배열
vector<Vec4i> hierarchy;//외곽선들 간의 계층구조
findContours( temp, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );//
int nAreaCnt = contours.size();
//_DbgStr(_T("cont=%d ,hier=%d"),nAreaCnt, hierarchy.size());
src = Scalar(0,0,0);//지우기
for(int i=0; i< nAreaCnt; i++){
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );//랜덤 색 만들기
int thickness = 2;//CV_FILLED=내부 채움
drawContours( src, contours, i, color, thickness , 8, hierarchy );//외곽선 그리기
}
return 1;
}
//
BackgroundSubtractorMOG2 로 배경제거
노이즈 제거
외곽선 검출
1 . CV_RETR_EXTERNAL
2. CV_RETR_LIST, CV_RETR_CCOMP , V_RETR_TREE
'Code > Desktop' 카테고리의 다른 글
샘플 추적용 영상 다운로드 사이트 (0) | 2014.03.11 |
---|---|
MatLab 컴파일 관련 에러 해결 (0) | 2014.03.11 |
[OpenCV] Mat 사용법 - 이미지 (0) | 2014.03.08 |
ATL::CImage GetBits memcpy error 해결 (0) | 2014.02.23 |
콜백함수 (1) | 2014.02.06 |