编辑:我正在查看错误的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 -我觉得这些都是第三描述符和探测器,因为这些话是在一些文件中提到的.但是,拥有一个当前编译/可用选项的完整列表会很不错.
谢谢!
我自己试着找到答案,然后编辑:
typedef Feature2D FeatureDetector并typedef Feature2D DescriptorExtractor进入modules/features2d/include/opencv2/features2d.hppFeature2D现在挖掘......create在https://github.com/Itseez/opencv/blob/master/modules/features2d/src/feature2d.cpp中没有 Cat*_*ree 11
您还有OpenCV文档,其中包含OpenCV功能列表:
如果该功能仅在关键点检测或描述符提取中可用,或者两者兼有,我要知道的是阅读文档中链接的相应文章.它还允许对功能进行简要描述(例如,如果它是二进制描述符,主要优点等)
其他解决方案是测试每个功能:
detect()正常(没有异常抛出)==>特征检测compute()是ok ==>特征提取detectAndCompute()是ok ==>两者也许存在更优化的解决方案......
无论如何,据我所知(如果我错了,请随时纠正我):
同样使用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)
最后,为什么
| 归档时间: |
|
| 查看次数: |
7871 次 |
| 最近记录: |