2016-01-15 13 views
5

Mam funkcję w moim projekcie, który zrobi szwy, funkcja działa poprawnie, to jest bardzo proste:OpenCV szwy z bezpłatnym dll

Mat output(m_Img, true), pano; // a panaoramic image 

    bool try_use_gpu = true; 
    Stitcher iSticher = Stitcher::createDefault(try_use_gpu); 
    // Set Feature finder to be ORB 
    iSticher.setFeaturesFinder(new detail::OrbFeaturesFinder()); 

    try{ 

     Stitcher::Status status = iSticher.stitch(Imgs, pano); 
     if (status != Stitcher::OK) 
     { 
      LOG("Error stitching - Code: %d", int(status)); 
      return -1; 
     } 
    } 
    catch(exception e) 
    { 
     LOG("Cannot Stitch Image,%s",e.what()); 
    } 

Kod działa dobrze i byłem w stanie ściegu obrazów dość dobrze. Jedynym problemem jest to, że gdy chcę wdrożyć mój kod, zdałem sobie sprawę, że muszę używać niewolnej biblioteki DLL. W przeciwnym razie .exe nie będzie działać. Moje pytania są następujące: aby używać klasy Stitcher z opencv, oznacza to, że musisz zapłacić, , nawet jeśli nie używasz algorytmów SURF lub SIFT? Czy istnieje sposób, aby to zrobić bez korzystania z "niewolnych bibliotek dll"? Uwaga: Używam opencv 2.4.2. Edycja: Przetestowałem to również z OpenCV 2.4.11

+0

Jakiego non-wolnego DLLu używasz? –

+0

@ KyyloPolezhaiev, o ile wiem, istnieje tylko jeden non-free.dll. Ale jeśli pytasz o niewolne funkcje, nie używam żadnej niewolnej funkcji, to jest tylko kod tutaj w pytaniu ... – Samer

+0

Wygląda na to, że nie musisz instalować 'opencv_nonfree.dll',' opencv_stitching. dll' zamiast tego. Czy korzystałeś z SIFT lub SURF w innym miejscu? A może w swoim projekcie jawnie linkowałeś do 'opencv_nonfree.lib'? – herohuyongtao

Odpowiedz

1

Po wielu kopaniu. Myślę, że znaleźli rozwiązanie tego problemu: Jest flagi opencv_modules.hpp nazywa: HAVE_OPENCV_NONFREE Jeśli undefine lub komentarz definicji tej flagi i budować opencv ze źródła to powinno rozwiązać ten problem, tzn opencv_stitching.dll nie będzie depeneds na opencv_non-free.dll