2012-10-31 1 views
1

다음 윤곽선을 그리려면 다음 코드를 사용하십시오. 그러나 내가 잘못하고있는 것이있는 것 같습니다. drawContours()가 호출 될 때가장 큰 윤곽선을 그릴 수 없습니다.

if(inputImage.data == NULL) 
     return HandInfo2(); 
     Mat outputImage = Mat::zeros(inputImage.size(), CV_8UC1); 
     vector<vector<Point> > contours; 
     vector<Vec4i> hierarchy; 
     vector<Point> largestContour; 
     int largestArea = -1; 

    findContours(inputImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 

    /// Approximate contours to polygons 
    vector<vector<Point> > polyContours(contours.size()); 

    for(int i = 0; i < contours.size(); i++) 
    { 
     approxPolyDP(Mat(contours[i]), polyContours[i], 3, true); 
    } 

    for(int i = 0; i < contours.size(); i++) 
    { 
     int area = fabs(contourArea(polyContours[i],false)); 
     if(area > largestArea && area > size) 
     { 
      largestArea = area; 
      largestContour = polyContours[i]; 
     } 
    } 

    Scalar color = Scalar(255); 

    if(largestContour.size()>0) 
    drawContours(outputImage, largestContour, 0, color, 1, 8, vector<Vec4i>(), 0, Point());  

, 나는

OpenCV Error: Assertion failed (i < 0) in unknown function, file ..\..\..\src\opencv\modules\core\src\matrix.cpp, line 957

THE ERROR

내가 잘못 여기서 뭐하는 거지 다음과 같은 오류가 조언을 주시기 바랍니다?

+1

안녕하세요, 저는 이것을 최적화 할 수 있다고 생각합니다. 윤곽선을 반복하고 '최대 값'에 최대 값을 저장하는 대신 윤곽선을 여러 번 복사 할 필요가 없도록 가장 큰 윤곽선의 인덱스를 저장할 수 있습니다. 그런 다음, 인덱스에 의해'polyContours'에서 가장 큰 컨투어에 접근 할 수 있습니다. 어떻게 생각하십니까? –

+0

나는 그것이 좋은 것이라고 생각한다! –

답변

0

같은 실수를 저지른 사람에게만 좋습니다.

벡터 largestContour 대신 vector<vector<Point>> largestContour;이 필요합니다.

그리고

그것은 그 것이었다 largestContour.push_back(polyContours[i]);

largestContour = polyContours[i];의 코드를 변경했습니다. 이제 가장 큰 윤곽을 추출 할 수 있습니다.