jjzjj

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

coder 2024-02-08 原文

编辑: 我看错了 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/

有关c++ - OpenCV 3:可用的 FeatureDetector::create() 和 DescriptorExtractor::create() 选项列表?的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  3. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  4. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  5. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  6. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  7. ruby-on-rails - ActiveRecord 的 find_or_create* 方法是否存在根本性缺陷? - 2

    有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?

  8. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  9. ruby-on-rails - 工厂女孩/Rails : Generator to create a factory for existing model? - 2

    我在我的Rails项目中使用rspec_rails和factory_girl_railsgem。所有模型都已创建。是否有我可以运行的生成器来为现有模型创建工厂文件?例如:我已经有了一个Blog模型。RSpec允许我通过简单地运行以下命令在spec/models/blog_spec.rb生成一个模型规范文件:railsgeneraterspec:modelblog是否有我可以在命令行中运行的生成器,它会为这个现有模型生成工厂文件,位于:spec/factories/blogs.rb?我在factory_girl_rails中没有看到任何关于发电机的提及文档。

  10. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

随机推荐