加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OpenCV 3:可用的FeatureDetector :: create()和Descriptor

发布时间:2020-12-16 10:02:26 所属栏目:百科 来源:网络整理
导读:编辑:我正在查看错误的OpenCV2代码示例,OpenCV3中没有FeatureDetector :: create – 这让我很困惑. 嘿,他是OpenCV的新手,通过拉开其他人的C代码来学习. 我想尝试所有可用的选项: detector = FeatureDetector::create(str_detector);descriptor = Descripto
编辑:我正在查看错误的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 – 我认为这些是第三个描述符和检测器,因为在某些文件中提到了这些词.但是,拥有一个当前编译/可用选项的完整列表会很不错.

谢谢!

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

>在modules / features2d / include / opencv2 / features2d.hpp中找到typedef Feature2D FeatureDetector和typedef Feature2D DescriptorExtractor
>现在为Feature2D挖掘……
>我很困惑,我的C让我失望,https://github.com/Itseez/opencv/blob/master/modules/features2d/src/feature2d.cpp没有创造
>好吧所以只看代码(https://github.com/Itseez/opencv/blob/master/modules/features2d/include/opencv2/features2d.hpp)

> BRISK
> ORB
> MSER
> FastFeatureDetector / FAST
> AgastFeatureDetector / AGAST
> GFTTDetector
> SimpleBlobDetector
> KAZE / AKAZE

>和来自贡献代码(https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp)

> FREAK
> StarDetector
> BriefDescriptorExtractor
> LUCID
>闩锁
> DAISY
> MSDDetector

>和来自nonfree contrib code(https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp)

> SIFT
> SURF

>仍然不确定上述哪些可以/应该用于FeatureDetector或DescriptorExtractor

解决方法

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

> OpenCV 3.1 documentation
> OpenCV 3.1 contrib documentation

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

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

>如果对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(),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;

最后,为什么

07002

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读