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滤波器