FeatureDetectors不在OpenCV 3.0.0中?

时间:2016-10-06 04:09:37

标签: c++ opencv

我正在尝试使用OpenCV FeatureDetector类; MSER,跟踪,快速等的好功能

但是当我使用它们时,我得到编译器错误:

  

错误1错误C2259:'cv :: FastFeatureDetector':无法实例化抽象类

我是否需要包含特定的头文件,dll或其他内容?什么出错了?我几乎每次尝试使用FeatureDescriptor时都会遇到编译器错误。例如,使用GoodFeaturesToTrackDetector会导致另一个编译器错误:

  

错误1错误C2039:'GoodFeaturesToTrackDetector':不是'cv'的成员

我正在使用OpenCV 3.0.0。我在使用VS2013的Windows 8.1上。我包括以下OpenCV库:

  
      
  • opencv_world300d.lib
  •   
  • opencv_highgui300d.lib
  •   
  • opencv_imgcodecs300d.lib
  •   
  • opencv_text300d.lib
  •   
  • opencv_features2d300d.lib
  •   
  • opencv_imgproc300d.lib
  •   
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/calib3d.hpp"

using namespace cv;

void featureDetectorExperimentation()
{
    image = imread("i.jpg");

    std::vector<KeyPoint> keypoints;
    Ptr<FeatureDetector> fast = new FastFeatureDetector(40); 
    // Above line compiler error: "Error    1   error C2259: 'cv::FastFeatureDetector' : cannot instantiate abstract class"

    fast->detect(image, keypoints);

    drawKeypoints(image, keypoints, image, Scalar(255, 255, 255), DrawMatchesFlags::DRAW_OVER_OUTIMG);

    imshow("Image", image);
}

2 个答案:

答案 0 :(得分:0)

您获得的错误意味着您尝试实例化的类是abstract,这基本上意味着您只能使用从其继承的类的对象,而不是类本身。

在这种情况下,您并不关心将要使用的确切实现,因此您可以使用指向FastFeatureDetector类型对象的指针。这个指针可以通过带有FastFeatureDetector::create函数的opencv api为你创建,如下所示:

Ptr<FeatureDetector> fast = FastFeatureDetector::create(40); 

答案 1 :(得分:0)

我也收到相同的错误消息。执行以下操作时,错误消失:

cv::Ptr<cv::FastFeatureDetector> fast = cv::FastFeatureDetector::create(40);