大图像的OpenCV CvSeq递归元素访问失败?

时间:2011-09-30 07:34:41

标签: c++ recursion opencv

我的开发环境是Windows 7上的Mingw32位CMake。(这个代码在Linux上工作正常)

我使用 cvFindContours()来检测使用OpenCV的轮廓。

我使用递归方法来traveser得到的CvSeq按级别访问轮廓,如下所示:

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,contour,i); 这种情况发生在一些特定的大图像上,在Linux中运行良好。

我上传了一个示例程序来演示

中的场景

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

*使用CMake下载和编译

*使用示例图像运行代码 -         “OCvTest.exe test-img.tif”

*将滑块值更改为114左右,应用程序崩溃。

*如果第27行被评论工作正常。

有关此的任何提示吗?

这可能是一个OpenCV错误吗?

提前感谢。

1 个答案:

答案 0 :(得分:0)

我意识到这是由于递归函数而发生的。一旦我把它变成迭代的,一切都运行正常。 现在我知道为什么递归函数是坏的...之前没有真正“实际”理解......