У меня есть функция в моем проекте, которая будет делать сшивание, функция работает нормально, это очень просто:
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());
}
Код работает хорошо, и я смог сшить изображения довольно хорошо. Единственная проблема заключается в том, что когда я хочу развернуть свой код, я понял, что должен использовать несвободную DLL. В противном случае .exe
не побежит Мои вопросы: для того, чтобы использовать Stitcher
класс из opencv означает ли это, что вы должны платить, даже если вы не используете SURF
или же SIFT
алгоритмы? Есть ли способ сделать это без использования «несвободных DLL»?
Примечание: я использую opencv 2.4.2
, Изменить: я также проверил это с OpenCV 2.4.11
Итак, после долгих копаний. Я думаю, что нашел решение этой проблемы:
Есть флаг в opencv_modules.hpp
называется: HAVE_OPENCV_NONFREE
если ты undefine
или прокомментируйте определение этого флага и постройте opencv
из источника, то это должно решить эту проблему, т.е. opencv_stitching.dll
не будет зависеть от opencv_non-free.dll
Других решений пока нет …