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
Jakiego non-wolnego DLLu używasz? –
@ 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
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