在OpenCV4.6版本下,C++编写的程序中使用了stitcher->setFeaturesFinder(makePtr<SurfFeatureDetector>());,提示错误"cv:.xfeatures2d:SURF”:无法实例化抽象类,应该怎么解决
时间: 2023-06-09 22:05:58 浏览: 61
在 OpenCV4.6 版本中,由于实现方式的变化,SurfFeatureDetector 已经被替换成了 SurfFeaturesFinder。所以,在您的程序中,需要将以下代码:
stitcher->setFeaturesFinder(makePtr<SurfFeatureDetector>());
修改为:
stitcher->setFeaturesFinder(makePtr<SurfFeaturesFinder>());
这样就能够成功的编译运行了。同时,您还需要在程序中添加以下头文件包含:
#include "opencv2/xfeatures2d.hpp"
这样就能够成功使用 SurfFeaturesFinder 进行图像拼接处理了。
相关问题
在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版本或使用其他算法。
opencv4.6的情况下,使用stitcher->setFeaturesFinder(SURF::create());有报错应该怎么解决
如果在使用OpenCV 4.6版本中遇到setFeaturesFinder函数调用时出现错误,可以尝试更新OpenCV库,或者尝试使用其它函数进行特征点提取。同时,也建议在查询相关错误信息的同时,查看OpenCV官方文档和论坛,以获得更多的帮助和解决方案。