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 )
'Programming > OpenCV' 카테고리의 다른 글
OpenCV 를 이용하여 동영상 재생하기. (0) | 2013.04.26 |
---|---|
Haar Face Detection (0) | 2013.04.02 |
[Function] FindContour 덩어리 찾기 (0) | 2013.04.02 |
Duglas Puecker 외곽선 근사화 (0) | 2013.04.02 |
[Function] Dialog 창에 IplImage 출력하기 (0) | 2013.04.02 |
[Function] Convex Hull 최외곽선 검출하기 (3) | 2013.04.02 |
댓글을 달아 주세요
안녕하세요. 이 게시물로부터 많은 도움을 받았습니다. 감사합니다.
그런데, CvSeq* hull; 변수가 할당되지 않은 채 if문에서 hull->total 로 호출되고 있는 것 같은데 중간에 초기화가 생략되었는지 알 수 있을까요?
이부분 같은경우 어떤 개념인지 한번 짚고 넘어가느라 해본게 다라 정확히 기억이 안나네요 왜 저런식으러 뒀었는지.. 아마 저 if(hull-> ... ) 이부분이 hull 이 아니라 ptseq 가 되야 하지 않을까.. 합니다.
아 그러네요 감사합니다!!!