我在 x86_64 架构上为 Ubuntu 12.10 使用 OpenCV 2.4.6.1 的 C++ 实现。我正在将 Agast Corner Detector 的代码封装在一个继承自cv::FeatureDetector
.
检查feature2d 模块头代码并观察其他实现,我发现我应该强制实现该detectImpl
方法:
virtual void detectImpl( const Mat& image, std::vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const = 0;
通常它还实现了一个名为operator
具有以下签名的方法:
CV_WRAP_AS(detect) void operator()(const Mat& image, CV_OUT std::vector<KeyPoint>& keypoints) const;
查看其他实现,我不能确切地说每种方法应该做什么。operator
我猜第二个与检测关键点的检测方法有关:
cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("...");
detector->detect(img, keypoints);
根据您的经验,这两种方法有什么区别,它们各自应该实现什么?
与使用工厂方法的检测器实例化cv::FeatureDetector::create
相关,我有一些与通常作为检测器类实现的公共属性并使用源文件中的 CV_INIT_ALGORITHMinfo
的类型属性相关的线索。AlgorithmInfo*
features2d_init
为了能够使用工厂方法实例化我的自定义 FeatureDetector,我应该实现什么?