2016-10-06 5 views
0

Я пытаюсь использовать классы OpenCV FeatureDetector; MSER, хорошие характеристики для отслеживания, БЫСТРО и т.д.FeatureDetectors не в OpenCV 3.0.0?

Но когда я использую их, я получаю сообщение об ошибке компилятора:

Error 1 error C2259: 'cv::FastFeatureDetector' : cannot instantiate abstract class

мне нужно включить специальный файл заголовка, DLL или что-то делать? Что происходит не так? Я получаю ошибки компилятора почти в каждом FeatureDescriptor Я пытаюсь использовать. Например, использование GoodFeaturesToTrackDetector вызывает другую ошибку компилятора:

Error 1 error C2039: 'GoodFeaturesToTrackDetector' : is not a member of 'cv'

Я использую OpenCV 3.0.0. Я использую Windows 8.1 с помощью VS2013. Я в том числе следующих библиотек 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); 
} 

ответ

0

ошибку вы получаете означает, что класс вы пытаетесь создать экземпляр является abstract, который в основном означает, что вы можете использовать только объекты классов, которые наследуют от него, а не сам класс.

В этом случае вам все равно, какую именно реализацию вы собираетесь использовать, поэтому вы можете использовать указатель на объект типа FastFeatureDetector. Этот указатель может быть создан для вас в OpenCV апи с FastFeatureDetector::create функции следующим образом:

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

Я также получаю то же сообщение об ошибке. Ошибка исчезнет, ​​если вы выполните следующие действия:

cv::Ptr<cv::FastFeatureDetector> fast = cv::FastFeatureDetector::create(40); 
Смежные вопросы