FeatureDetectors 不在 OpenCV 3.0.0 中?

Posted

技术标签:

【中文标题】FeatureDetectors 不在 OpenCV 3.0.0 中?【英文标题】:FeatureDetectors not in OpenCV 3.0.0? 【发布时间】:2016-10-06 04:09:36 【问题描述】:

我正在尝试使用 OpenCV FeatureDetector 类; MSER、Good Features to Track、FAST 等。

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

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

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

错误 1 ​​错误 C2039: 'GoodFeaturesToTrackDetector' : is not a member of '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);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于FeatureDetectors 不在 OpenCV 3.0.0 中?的主要内容,如果未能解决你的问题,请参考以下文章

学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器

VLFeat开源库介绍及在VS2013中的编译

自编码器

UG NX二次开发(C#)-建模-计算两个组件之间的距离(最小值和定位点距离)

游标的使用

读写文件