编辑:我正在查看错误的OpenCV2代码示例,OpenCV3中没有FeatureDetector::create
- 这让我感到困惑。
嘿,他是OpenCV的新手,通过拉开其他人的C ++代码来学习。
我想尝试以下所有选项:
detector = FeatureDetector::create(str_detector);
descriptor = DescriptorExtractor::create(str_descriptor);
目前str_detector为FAST
,str_descriptor为BRISK
我无法找到可用的探测器和描述符。
有没有办法输出所有当前可用选项的列表?
(我刚刚在全新的linux安装中使用github构建了最新的opencv + opencv-contrib)
我在这里找到了第三方文件列表https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d/src - 我认为这些是第三个描述符和检测器,因为在某些文件中提到了这些词。但是,拥有一个当前编译/可用选项的完整列表会很高兴。
谢谢!
我自己试着找到答案,然后编辑:
typedef Feature2D FeatureDetector
typedef Feature2D DescriptorExtractor
和modules/features2d/include/opencv2/features2d.hpp
Feature2D
...... create
答案 0 :(得分:8)
您还有OpenCV文档,其中包含OpenCV功能列表:
如果该功能仅在关键点检测或描述符提取中可用,或者两者都是,请阅读文档中链接的相应文章。它还允许对功能进行简要描述(例如,如果它是二进制描述符,主要优点等)。
其他解决方案是测试每个功能:
detect()
的调用没问题(没有抛出异常)==>特征检测compute()
的通话是否正常==>特征提取detectAndCompute()
的通话是否正常==>两个可能存在更优化的解决方案......
无论如何,据我所知(如果我错了,请随时纠正我):
使用OpenCV 3.1时,代码为:
cv::Ptr<cv::Feature2D> kaze = cv::KAZE::create();
std::vector<cv::KeyPoint> kpts;
cv::Mat descriptors;
kaze->detect(matImg, kpts);
kaze->compute(matImg, kpts, descriptors);
kaze->detectAndCompute(matImg, cv::noArray(), kpts, descriptors);
cv::Ptr<cv::Feature2D> daisy = cv::xfeatures2d::DAISY::create(); //Contrib
要知道使用哪种规范类型:
std::cout << "AKAZE: " << akaze->descriptorType() << " ; CV_8U=" << CV_8U << std::endl;
std::cout << "AKAZE: " << akaze->defaultNorm() << " ; NORM_HAMMING=" << cv::NORM_HAMMING << std::endl;
最后,为什么