2012-08-07 3 views
0
vector<Point> hull; 
vector<Point> defects; 
convexHull(Mat(largest),hull,false); 
convexityDefects(largest,hull,defects); 

* 가장 큰 이미지OpenCV의 C는 이력서 :: convexityDefects 오류를 ++

내 가장 큰 윤곽하지만 convexityDefects 나에게이 오류 "선언이 실패한 제공 (hull.checkVector (1, CV_32S을)> 2) ". 누군가 제발 나를 도와주세요, 나는 C 해결책을 사용하는 것에 의지하고 싶지 않습니다.

난 아직도 나에게 오류를주고있다 convexityDefects하지만 convexityDefects에 전달하기 전에 유형 vector<vector<int>>와 그것을 만드는 시도

vector<int> hull; 
vector<Point> defects; 
convexHull(Mat(largest),hull,false); 

vector<vector<int>> testhull; 
testhull.push_back(hull); 
convexityDefects(largest,testhull,defects); 

수정 됨 "어설 션 (ptnum> 3) ... 실패".

답변

2

convexityDefects의 두 번째 인수는 vector<vector<int>이어야하며 사용자의 주소는 vector<Point>이어야합니다. 이 같은 벡터의 벡터를 사용한다 선체에 대한

+0

는 내 코드를 일부 변경 한 첫 번째 게시물에서 다시 확인하십시오. 감사. – XterNalz

+0

@ user1434759 나는 모든 문제에 대한 답을 매우 빨리 봤다. 묻기 전에 google을 시도 했습니까? http://stackoverflow.com/questions/10620981/calculating-convexitydefects-using-opencv-2-4-in-c – ArtemStorozhuk

4

:

vector<vector<Point>> hullsP(contours.size()); 
vector<vector<int> > hullsI(contours.size()); 

을하고 "INT"유형을 통과은이 covexityDefects.like합니다 :

vector<vector<Vec4i>> convdefect(contours.size()); 

for(int i = 0; i < contours.size(); i++) 
{ 
    convexHull(Mat(contours[i]), hullsP[i], false); 
    convexHull(Mat(contours[i]), hullsI[i], false);  
    if(hullsI[i].size() > 3) 
     convexityDefects(contours[i],hullsI[i],convdefect[i]); 
}