如何将cv::xfeatures2d::SurfFeatureDetector实例化
时间: 2023-06-09 14:05:37 浏览: 123
您可以按照以下步骤实例化cv::xfeatures2d::SurfFeatureDetector:
1. 首先,您需要包含以下头文件:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
```
2. 接下来,您可以使用cv::xfeatures2d::SURF类中的create()函数来创建一个SurfFeatureDetector的实例:
```cpp
cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();
```
3. 最后,您可以使用新创建的SurfFeatureDetector实例来检测图像中的SURF特征点:
```cpp
std::vector<cv::KeyPoint> keypoints;
surf->detect(image, keypoints);
```
请确保在使用cv::xfeatures2d::SurfFeatureDetector之前,您已经正确地安装了OpenCV并为其设置了正确的include和lib路径。
相关问题
在OpenCV4.6版本下,C++编写的程序中使用了cv::Ptrcv::xfeatures2d::SURF surf = cv::xfeatures2d::SURF::create(); stitcher->setFeaturesFinder(makePtr<SurfFeatureDetector>());提示错误"cv:.xfeatures2d:SURF”:无法实例化抽象类,应该怎么解决
这个错误是因为cv::xfeatures2d::SURF是一个抽象类,无法直接实例化。解决这个问题的方法是,使用cv::xfeatures2d::SURF::create()函数创建一个对象,而不是直接使用构造函数。将代码修改为以下内容:
cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();
stitcher->setFeaturesFinder(surf);
此外,如果您的OpenCV版本低于3.0,xfeatures2d模块可能不包含SURF算法,因此您需要升级您的OpenCV版本或使用其他算法。
lobal shadow_sift.hpp:15 cv::xfeatures2d::SIFT_create DEPRECATED: cv.xfeatures2d.SIFT_create() is deprecated due SIFT tranfer to the main repository
你的问题是关于 cv::xfeatures2d::SIFT_create 函数的警告信息。这个警告信息是因为该函数已被标记为过时的,原因是 SIFT 算法已经从 OpenCV 的扩展模块被移到了主存储库中。因此,建议你使用 OpenCV 的主存储库中的 SIFT 函数,而不是使用 cv::xfeatures2d::SIFT_create。你可以使用 cv::SIFT_create() 函数来代替 cv::xfeatures2d::SIFT_create。
阅读全文