未实现 OpenCV SURF 函数

OpenCV SURF function is not implemented

本文关键字:函数 SURF OpenCV 实现      更新时间:2023-10-16

当我尝试运行示例find_obj.cpp或任何 OpenCV SURF 程序时,我在执行代码时在命令提示符下收到以下错误。项目生成时没有错误和警告。我使用的是VS2011测试版,OpenCV 2.4和windows7。

错误信息:

OpenCV Error: The function/feature is not implemented < OpenCV was built without SURF support> in unknown function,file ......srcopencvmoduleslegacysrcfeatures2d.cpp, line 77

我尝试在调试模式下使用 Cmake 和 VS2011 再次构建 OpenCV 2.4,然后在 IDE 中添加 lib 路径,但仍然没有结果。

我该如何解决这个问题?

    #include <opencv2/objdetect/objdetect.hpp>
    #include <opencv2/features2d/features2d.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/legacy/legacy.hpp>
    #include <opencv2/legacy/compat.hpp>
    #include <opencv2/flann/flann.hpp>
    #include <opencv2/calib3d/calib3d.hpp>
    #include <opencv2/nonfree/features2d.hpp>
    #include <opencv2/nonfree/nonfree.hpp>
using namespace std;
using namespace cv;
int main()
{
    cv::initModule_nonfree();//THIS LINE IS IMPORTANT   
   IplImage *image1 = cvLoadImage("C:\SURF\1.jpg"); 
    IplImage *image2 = cvLoadImage("C:\SURF\2.jpg");
    CvMemStorage* memoryBlock = cvCreateMemStorage();
    CvSeq* image1KeyPoints;
    CvSeq* image1Descriptors;
    CvSeq* image2KeyPoints;
    CvSeq* image2Descriptors;
    // Only values with a hessian greater than 500 are considered for keypoints
   CvSURFParams params = cvSURFParams(500, 1);
   cvExtractSURF(image1, 0, &image1KeyPoints, &image1Descriptors, memoryBlock, params);
   cvExtractSURF(image2, 0, &image2KeyPoints, &image2Descriptors, memoryBlock, params);
   return 0;
}

取自这个答案(你为什么不在问之前谷歌你的问题?

SIFT和SURF代码在OpenCV v2.4中被移动到一个名为的新模块。 nonfree .确保你正在链接到它(Windlows中的DLL)。在 Linux 中,这个库称为 libopencv_nonfree.so

这不是

一个错误。SURF 位于非自由模块中。要使用它,您应该初始化非自由模块:

    #include <opencv2/nonfree/nonfree.hpp> 
    ... 
    cv::initModule_nonfree();

最近,我正在学习SURF。对于此问题,您可以将 opencv_nonfree240d.lib 和 opencv_nonfree240.lib 添加到项目的 lib 路径中。

对于 ubuntu 的脚本在https://help.ubuntu.com/community/OpenCV可以通过添加进行修改以用于非自由冲浪/筛选

libopencv_nonfree

到 sudo apt-get 命令的末尾,以及

-D BUILD_opencv_nonfree=开

到 cmake 命令的末尾。只有在从软件中心卸载我能找到的处理 opencv 的所有内容后,它才对我有用。 顺便说一下,软件中心还有一个opencv非自由库,"libopencv-nonfree2.4",它似乎没有帮助。我不是这些东西的专家,所以我不知道我所做的是否 100% 正确,但它允许诸如

冲浪 = CV2。冲浪(400)

keypoint = surfDetector.detect(im)

运行以前没有的运行(第一个导致"未找到"类型错误,而第二个导致段错误)。

允许我使用粘贴到 http://pastebin.com/sQzDdx5i
的非自由冲浪/筛选的 opencv.sh 版本现在工作的版本是 opencv-2.4.9,但这可能适用于其他版本,因为脚本似乎和 lib 名称一样有些不可知。