未实现 OpenCV SURF 函数
OpenCV SURF function is not implemented
当我尝试运行示例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 名称一样有些不可知。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 未实现 OpenCV SURF 函数
- OpenCV SURF:两个特性之间的代价函数