OpenCV CvSeq рекурсивный доступ к элементам не подходит для больших изображений? - PullRequest
0 голосов
/ 30 сентября 2011

Моя среда разработки - Mingw32 bit CMake в Windows 7. (этот же код отлично работает в Linux)

Я использую cvFindContours () для обнаружения контуров с помощью OpenCV.

Я использую рекурсивный метод для перемещения результирующего 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, контур, i); Это происходит с некоторыми конкретными большими изображениями и прекрасно работает в Linux.

Я загрузил пример программы для демонстрации сценария на

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

* скачать и скомпилировать с помощью CMake

* запустите код, используя образец изображения - "OCvTest.exe test-img.tif"

* изменяет значение ползунка около 114, происходит сбой приложения.

*, если закомментирована строка # 27, работает нормально.

Есть какие-нибудь советы по этому поводу?

Может ли это быть ошибка OpenCV?

спасибо заранее.

1 Ответ

0 голосов
/ 01 октября 2011

Я понял, что это происходит из-за рекурсивной функции. Как только я сделал это итеративной, все работало нормально.Теперь я знаю, почему рекурсивные функции плохи ... неужели "практически" не понимали этого раньше ...

...