在OpenCV4.6版本下,C++编写的程序中使用了stitcher->setFeaturesFinder(makePtr<SurfFeatureDetector>());,提示错误"cv:.xfeatures2d:SURF”:无法实例化抽象类,应该怎么解决
时间: 2023-06-09 15:05:58 浏览: 148
在 OpenCV4.6 版本中,由于实现方式的变化,SurfFeatureDetector 已经被替换成了 SurfFeaturesFinder。所以,在您的程序中,需要将以下代码:
stitcher->setFeaturesFinder(makePtr<SurfFeatureDetector>());
修改为:
stitcher->setFeaturesFinder(makePtr<SurfFeaturesFinder>());
这样就能够成功的编译运行了。同时,您还需要在程序中添加以下头文件包含:
#include "opencv2/xfeatures2d.hpp"
这样就能够成功使用 SurfFeaturesFinder 进行图像拼接处理了。
相关问题
使用cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create(); stitcher->setFeaturesFinder(surf);报错LNK2019和LNK1120应该怎么解决
这个报错是由于链接器找不到对应的函数引用而导致的。要解决这个问题,可以尝试以下几种方法:
1. 检查代码是否正确引用了相关的库文件。比如,对于cv::xfeatures2d::SURF,需要引用opencv_features2d库文件。
2. 确保库文件和头文件的版本一致。如果版本不一致也可能导致链接错误。
3. 检查代码是否正确引用了命名空间。在使用SURF时需要使用cv::xfeatures2d::SURF,如果没有引用命名空间也会导致链接错误。
4. 确认代码中是否存在重复定义。重复定义也可能导致链接错误。
还有其他可能的原因导致这个问题,具体需要针对情况进行排查。
在OpenCV4.6版本下,C++编写的程序中使用了SurfFeatureDetector,提示错误"cv:.xfeatures2d:SURF”:无法实例化抽象类,应该怎么解决
这个问题可能是由于OpenCV4.6中SURF算法被移动到了xfeatures2d模块中,需要进行修改。你需要使用xfeatures2d模块中的SURF实现。可以通过在代码中引入以下头文件来解决问题:
```cpp
#include <opencv2/xfeatures2d.hpp>
```
然后,使用以下方式创建SURF对象:
```cpp
cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();
```
这样就可以成功实例化SURF类并使用其功能了。
阅读全文