cv::findcontours wywala błąd

0

Witam was serdecznie. Otóż sprawa wygląda następująco. Piszę program w QtCreatorze używając biblioteki opencv. Poniżej wklejam jedną z niezbyt skomplikowanych aczkolwiek kłopotliwych funkcji funkcji

 
void MainWindow::on_CutCircpushButton_clicked()
{
      GaussianBlur( Image::Binarized, Image::AfterCuttingImage, Size(9, 9), 2, 2 );

      Mat cont;

      Image::AfterCuttingImage = Image::Binarized;
      Image::Binarized.copyTo(cont);


      vector<vector<Point>> contours;
      vector<Vec4i> hierarchy;

      
      cont.convertTo(cont, CV_8U);

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


      QImage QGIMG = putImage(Image::AfterCuttingImage);
      QImage ScaledQGIMG = QGIMG.scaled(180,280, Qt::IgnoreAspectRatio, Qt::FastTransformation);
      ui->Aft_process_label->setPixmap(QPixmap::fromImage(ScaledQGIMG));
}

Kod kompiluje się bez żadnych błedów. Jednak po odpaleniu i wywołaniu tej funkcji wyświetla się błąd :


Microsoft Visual C++ Debug Library

Debug Assertion Failed!

Program: C:\Users\Kuba\build-juj-Desktop-Debug\debug\juj.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1322

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

Przerwij Ponów próbę Ignoruj

Błąd jest spowodowany metodą findContours - po jej zakomentowaniu wszystko jest ok. Dodam jeszcze, że błąd pojawia się dopiero po opuszczeniu funkcji on_CutCircpushButton_clicked() (wykonując ją krok po kroku metaoda findContours wykonuje się )

Chyba zrobilem już wszystko... Całego googla przeczytałem i nic...
Jeszcze zostało mi zwrócenie się tu do was o pomoc.

Tak więc bardzo was prosze o jakieś wskazówki co to może być za cholerstwo...

0

Problem rozwiązany. Należy użyć kompilatora MSVC C++ 2010. Na 2012 nie pójdzie.

Pozdr

0

Jak dla mnie problem jest użycie pól statycznych. Efekt jest taki, że masz problem z zarządzaniem pamięcią względnie jakieś race condition i pod innym kompilatorem problem nie wypływa tylko przypadkowo.
Na dodatek problemu tego nie widać w załączonym kodzie.

0

Używanie pól statycznych jest błędem ? Jest jakiś inny sposób by zaradzić temu problemowi ?

1

Nieuzasadnione używanie pól statycznych stanowi bardzo zły styl kodowania tępiony we wszystkich poważnych projektach, szczególnie jeśli grzebiesz po polach statycznych innej klasy. Całkiem możliwe, ze twój błąd jest pokłosiem naruszenia tej zasady.

Osobną sprawą jest to, że błąd w twoim kodzie siedzi, gdzieś zupełnie w innej części niż pokazałeś, a brak crash-a gdy używasz starszego kompilatora wcale nie oznacza, że rozwiązałeś problem, przypuszczalnie jest to tylko łut szczęścia. Całkiem możliwe, że jak zmienisz ustawienia kompilatora (np zrobisz build release) to błąd powróci nawet z VS 2010.

1 użytkowników online, w tym zalogowanych: 0, gości: 1