当前位置:   article > 正文

c++ 使用opencv中SIFT类时使用函数detect报错问题_ptrdetector = sift::create()

ptrdetector = sift::create()

在使用SIFT::detect(gray,keypoint1)报错

OpenCV(3.4.16) Error: The function/feature is not implemented () in cv::Feature2D::detectAndCompute, file D:\OpenCV3.4\opencv3.4\sources\modules\features2d\src\feature2d.cpp, line 154

 

原始代码是这样的:

  1. Mat src;
  2. src = imread("tem.jpg");
  3. Mat gray = imread("tem.jpg", 0);
  4. SIFT detector;
  5. vector<KeyPoint> keypoint1;
  6. detector.detect(gray, keypoint1);

改为 

  1. Mat src;
  2. src = imread("tem.jpg");
  3. Mat gray = imread("tem.jpg", 0);
  4. vector<KeyPoint> keypoint1;
  5. Ptr <SIFT> detector = SIFT::create();
  6. detector->detect(gray,keypoint1);

 就可以正常调用detect函数.

 报错时通过堆栈我跟踪到这东西是跳转到Feature2D::detectAndCompute()

  1. void Feature2D::detectAndCompute(InputArray, InputArray,
  2. std::vector<KeyPoint>&,
  3. OutputArray,
  4. bool)
  5. {
  6. CV_INSTRUMENT_REGION();
  7. CV_Error(Error::StsNotImplemented, "");
  8. }

好吧这个地方确实是没有实现但是网上用相同版本opencv的又可以使用SIFT,查了一天有说高版本下因为专利问题删除了,退回到3.2版本就可以.

于是我又去看了3.2版本的源码发现这个位置同样也是返回未实现警告;

这说明不是我版本问题;

其他的说法是cmake的时候OPENCV_ENABLE_NONFREE没有勾选,或者说扩展模块没有增加.

好的,于是我按照教程全部完成之后报错位置和原因一点没变.

没办法继续找解决方案;

最终我找到了这个OpenCV SIFT源码讲解——代码逻辑宏观窥探_opencv sift 源码_lessssssss的博客-CSDN博客z讲解OpenCV的SIFT源码_opencv sift 源码https://blog.csdn.net/less_stronger/article/details/127884582

 detectAndCompute是被SIFT_Impl重写,在SIFT_Impl实现,而这个SIFT_Impl是继承于SIFT.因此只能通过他自己的静态函数

  1. CV_WRAP static Ptr<SIFT> create(int nfeatures = 0, int nOctaveLayers = 3,
  2. double contrastThreshold = 0.04, double edgeThreshold = 10,
  3. double sigma = 1.6);

static Ptr<SIFT> create这个函数它的实现在sift.dispatch.cpp中

  1. Ptr<SIFT> SIFT::create( int _nfeatures, int _nOctaveLayers,
  2. double _contrastThreshold, double _edgeThreshold, double _sigma )
  3. {
  4. CV_TRACE_FUNCTION();
  5. return makePtr<SIFT_Impl>(_nfeatures, _nOctaveLayers, _contrastThreshold, _edgeThreshold, _sigma, CV_32F);
  6. }

得到它的子类SIFT_Impl对象从而使用它.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/81172
推荐阅读
相关标签
  

闽ICP备14008679号