OpenCV 3:可用的FeatureDetector :: create()和DescriptorExtractor :: create()选项列表?

dtb*_*ker 5 c++ opencv

编辑:我正在查看错误的OpenCV2代码示例,FeatureDetector::createOpenCV3中没有- 这让我很困惑.


嘿,他是OpenCV的新手,通过拉开其他人的C++代码来学习.

我想尝试所有可用的选项:

detector = FeatureDetector::create(str_detector);
descriptor = DescriptorExtractor::create(str_descriptor);
Run Code Online (Sandbox Code Playgroud)

目前str_detector是FAST和str_descriptor是BRISK

我无法找到可用的探测器和描述符.

有没有办法输出所有当前可用选项的列表?

(我刚刚在新的linux安装上用github构建了最新的opencv + opencv-contrib)

我已经找到第三方的文件列表在这里https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d/src -我觉得这些都是第三描述符和探测器,因为这些话是在一些文件中提到的.但是,拥有一个当前编译/可用选项的完整列表会很不错.

谢谢!


我自己试着找到答案,然后编辑:

  1. 发现typedef Feature2D FeatureDetectortypedef Feature2D DescriptorExtractor进入modules/features2d/include/opencv2/features2d.hpp
  2. Feature2D现在挖掘......
  3. 我很困惑,我的C++让我失望,createhttps://github.com/Itseez/opencv/blob/master/modules/features2d/src/feature2d.cpp中没有
  4. 好的,只需查看代码(https://github.com/Itseez/opencv/blob/master/modules/features2d/include/opencv2/features2d.hpp)
    • 轻快
    • ORB
    • MSER
    • FastFeatureDetector/FAST
    • AgastFeatureDetector/AGAST
    • GFTTDetector
    • SimpleBlobDetector
    • KAZE/AKAZE
  5. 并从贡献代码(https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp)
    • 怪物
    • StarDetector
    • BriefDescriptorExtractor
    • LUCID
    • LATCH
    • 雏菊
    • MSDDetector
  6. 来自nonfree contrib code(https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp)
    • 冲浪
  7. 仍然不确定上述哪些可以/应该用于FeatureDetector或DescriptorExtractor

Cat*_*ree 11

您还有OpenCV文档,其中包含OpenCV功能列表:

如果该功能仅在关键点检测或描述符提取中可用,或者两者兼有,我要知道的是阅读文档中链接的相应文章.它还允许对功能进行简要描述(例如,如果它是二进制描述符,主要优点等)

其他解决方案是测试每个功能:

  • 如果调用detect()正常(没有异常抛出)==>特征检测
  • 如果调用compute()是ok ==>特征提取
  • 如果调用detectAndCompute()是ok ==>两者
  • 或者直接查看源代码.

也许存在更优化的解决方案......

无论如何,据我所知(如果我错了,请随时纠正我):

  • BRISK:探测器+描述符
  • ORB:探测器+描述符
  • MSER:探测器
  • 快速:探测器
  • AGAST:探测器
  • GFFT:探测器
  • SimpleBlobDetector:探测器
  • KAZE:探测器+描述符
  • AKAZE:探测器+描述符
  • FREAK:描述符
  • StarDetector:探测器
  • BriefDescriptorExtractor:描述符
  • LUCID:描述符
  • LATCH:描述符
  • DAISY:描述符
  • MSDDetector:探测器
  • SIFT:探测器+描述符
  • SURF:探测器+描述符

同样使用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
Run Code Online (Sandbox Code Playgroud)

要知道要使用哪种规范类型:

  std::cout << "AKAZE: " << akaze->descriptorType() << " ; CV_8U=" << CV_8U << std::endl;
  std::cout << "AKAZE: " << akaze->defaultNorm() << " ; NORM_HAMMING=" << cv::NORM_HAMMING << std::endl;
Run Code Online (Sandbox Code Playgroud)

最后,为什么

没有更多的feature2d :: create?