系统 -
我使用contrib模块构建了openCV 3.0.0。但是,当我编译这段代码时,我会收到错误。
#include <OpenNI.h> //used for taking in input from xtion pro live
#include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/xfeatures2d.hpp> // these are the libraries in the new location (they contain SURF implementation)
#include <opencv2/xfeatures2d/nonfree.hpp>
using namespace std;
//using namespace openni;
using namespace cv;
int main(void)
{
//from sample code
int minHessian = 400;
SurfFeatureDetector detector(minHessian);
return 0;
}
错误是 -
错误C2065:&#39; SurfFeatureDetector&#39; :未声明的标识符
答案 0 :(得分:3)
在OpenCV 3.0中构建Surf功能检测器的语法与2.x版本不同。
Ptr<SURF> surf=SURF::create(minHessian);
std::vector<KeyPoint> keypts;
Mat desc;
surf->detectAndCompute(img,noArray(),keypts,desc);
如果上面的例子仍然会抛出任何错误,我很抱歉,我没有工作版本来进行现场测试。
答案 1 :(得分:0)
我认为对于SURF你必须使用'额外'模块。看看:https://github.com/itseez/opencv_contrib/
基本上您需要做的是下载代码(opencv_contrib)。将其添加到opencv源文件夹中的模块列表中。然后,在cmake中你必须添加路径&lt; opencv_contrib&gt; / modules到EXTRA_MODULES_PATH。最后,在通过cmake生成项目之后,您将在opencv解决方案中找到xfeatured2d(我认为是您需要的那个),您将能够构建并使用它们。
答案 2 :(得分:0)
在opencv3.0中,它将opencv_world300d.lib(debug)和opencv_world300.lib(release)中的所有库组合在一起。 为此,您可以使用#include代替其他包含。 另一方面,它们在opencv3.1中是opencv_world310d.lib(debug)和opencv_world310.lib(release)。