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

标签 c++ opencv

编辑: 我看错了 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 - 我认为这些是第三描述符和检测器,因为某些文件中提到了这些词。然而,最好有一个完整的当前编译/可用选项列表。

谢谢!


试图自己找到答案,边走边编辑:

  1. modules/features2d/include/opencv2/features2d.hpp
  2. 中找到了 typedef Feature2D FeatureDetectortypedef Feature2D DescriptorExtractor
  3. 现在正在挖掘 Feature2D...
  4. 我很困惑,我的 C++ 让我失望了,https://github.com/Itseez/opencv/blob/master/modules/features2d/src/feature2d.cpp 中没有 create
  5. 好的,所以只需查看代码 ( https://github.com/Itseez/opencv/blob/master/modules/features2d/include/opencv2/features2d.hpp )
    • 轻快
    • ORB
    • MSER
    • 快速特征检测器/快速
    • AgastFeatureDetector/AGAST
    • GFTT检测器
    • SimpleBlobDetector
    • 风/风
  6. 来自贡献代码 ( https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp )
    • 怪胎
    • 星际探测器
    • BriefDescriptorExtractor
    • 清醒
    • 闩锁
    • 雏菊
    • MSDDetector
  7. 来自非自由贡献代码 ( https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp )
    • 筛选
    • 冲浪
  8. 仍然不确定以上哪些可以/应该用于 FeatureDetector 或 DescriptorExtractor

最佳答案

您还拥有 OpenCV 文档以获取 OpenCV 功能列表:

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

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

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

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

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

  • BRISK:检测器 + 描述符
  • ORB:检测器 + 描述符
  • MSER:检测器
  • FAST:检测器
  • AGAST:检测器
  • GFFT:检测器
  • SimpleBlobDetector:检测器
  • KAZE:检测器 + 描述符
  • AKAZE:检测器 + 描述符
  • 怪胎:描述符
  • StarDetector:探测器
  • BriefDescriptorExtractor:描述符
  • LUCID:描述符
  • LATCH:描述符
  • 雏菊:描述符
  • 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

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

  std::cout << "AKAZE: " << akaze->descriptorType() << " ; CV_8U=" << CV_8U << std::endl;
  std::cout << "AKAZE: " << akaze->defaultNorm() << " ; NORM_HAMMING=" << cv::NORM_HAMMING << std::endl;

最后,为什么

No more features2d::create?

关于c++ - OpenCV 3:可用的 FeatureDetector::create() 和 DescriptorExtractor::create() 选项列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691050/

相关文章:

python - 从扫描文档opencv python中提取内衬表

xcode - OpenCV编译有关 “cvloadimage”的错误,在main.o中引用自:_main

linux - Linux系统上Opencv的安装

c++ - 处理来自Unrar DLL的错误

c++ - 最高和最低平均 C++

c++ - 包含的 C++/C 头文件的实现在哪里?

opencv - 通过复制数据 opencv 调整矩阵大小

opencv - 如何使用 Kinect 在 OpenCV 中获取深度值然后转换为毫米?

C++ : Segmentation fault when call method of another class

c++ - 试图编译搅拌库 : error: invalid conversion from ‘const char*’ to ‘char*’