无法在OpenCV 3.0.0中使用SurfFeatureDetector

时间:2014-12-11 18:20:47

标签: linker surf opencv3.0

系统 -

  1. Windows 8.1 64位计算机
  2. OpenCV 3.0.0
  3. Visual Studio 12 2013
  4. 我使用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; :未声明的标识符

3 个答案:

答案 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)。