2011-09-30 3 views
0

내 개발 환경은 Mingw32이 OpenCV의를 사용하여 윤곽을 감지하는 (이 같은 코드가 리눅스에서 잘 작동)큰 이미지의 경우 OpenCV CvSeq 재귀 요소 액세스가 실패합니까?

내가 cvFindContours을 (사용) 윈도우 7에 CMake 비트입니다.

난 다음 레벨로 윤곽을 액세스하기 위해 생성 CvSeq을 traveser하는 귀납법을 사용

void helperParseCurves(CvSeq* contour, int level) { 


    //Travel same level contours 
    if(contour->h_next != NULL) { 
     helperParseCurves(contour->h_next, level); 
    } 
    if(contour->v_next != NULL) { 
     helperParseCurves(contour->v_next, level+1); 
    } 
    //Travel child levels 
    for(int i=0; i<contour->total; i++){ 

     //Try to access Point data -- Crash here when threshold level 114 ? 
     //Works when uncommented 
     CvPoint* p = CV_GET_SEQ_ELEM(CvPoint, contour, i); 

    } 
} 

그러나 행에서 응용 프로그램이 충돌 CvPoint * p = CV_GET_SEQ_ELEM (CvPoint, 컨투어, I); 이것은 특정 대형 이미지에 발생하며 Linux에서 정상적으로 작동합니다.

내가 샘플 이미지를 사용하여 코드를 실행

http://dl.dropbox.com/u/17399055/opencv-test.zip

* 다운로드의 시나리오를 설명하는 샘플 프로그램을 업로드하고

* CMake

를 사용하여 컴파일 한 - "OCvTest.exe 테스트 - img.tif "

* 슬라이더 값을 114로 변경하면 응용 프로그램이 충돌합니다.

* 줄 # 27이 주석 처리 된 경우 정상적으로 작동합니다.

이것에 대한 도움말?

OpenCV 버그 일 수 있습니까?

미리 감사드립니다.

답변

0

이 문제는 반복적 인 함수 때문에 발생한다는 것을 알게되었습니다. 반복적으로 만들면 모든 것이 잘 작동합니다. 이제 재귀 함수가 왜 나쁜지 알 수 있습니다 ... 실제로 "실제로"이해하지 못했습니다.

관련 문제