Programming/OpenCV
[Function] Convex Hull 최외곽선 검출하기
매직블럭
2013. 4. 2. 19:12
convex hull 이란?
여러개의 점들중에 최외곽의 점들을 이어놓은 집합? 연결된 선? 공간? 을 의미한다
convexhull 영역 내부에 모든 점이 존재하고 외부에는 점이 존재하지 않아야 한다.
- CvMemStorage* storage_hull = cvCreateMemStorage(0);
- IplImage* cnt_img = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
- cvZero( cnt_img );
- CvPoint pt0;
- CvSeq* ptseq = cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2,sizeof(CvContour),sizeof(CvPoint), storage_hull);
- CvSeq* hull;
- int hullcount = 0;
- int count_ = 0;
- for(int i=0; i<image->height; i++)
- {
- for(int j=0; j<image->width; j++)
- {
- if((unsigned char)image->imageData[i*image->widthStep+j*3]==255)
- {
- pt0.x = j;
- pt0.y = i;
- cvSeqPush(ptseq, &pt0);
- }
- }
- }
- if(ptseq->total != 0)
- {
- hull = cvConvexHull2(ptseq, 0, CV_COUNTER_CLOCKWISE, 0);
- hullcount = hull->total;
- cvZero(cnt_img);
- pt0 = **CV_GET_SEQ_ELEM(CvPoint*, hull, hullcount - 1);
- for(int i=0; i<hullcount; i++)
- {
- CvPoint pt = **CV_GET_SEQ_ELEM(CvPoint*, hull, i);
- cvLine(image, pt0, pt, CV_RGB(0, 255, 0));
- //cvLine(image, CvPoint(cvPoint(center_x,center_y)), pt, CV_RGB(255, 0, 0));
- pt0 = pt;
- }
- }
소스코드 보기좋게 수정하였습니다. ( 14.04.08 )