dyn*_*mic 16 c++ opencv surf sift
我试图使用带有ORB描述符的FLANN,但opencv崩溃了这个简单的代码:
vector<vector<KeyPoint> > dbKeypoints;
vector<Mat> dbDescriptors;
vector<Mat> objects;
/*
load Descriptors from images (with OrbDescriptorExtractor())
*/
FlannBasedMatcher matcher;
matcher.add(dbDescriptors);
matcher.train() //> Crash!
Run Code Online (Sandbox Code Playgroud)
如果我使用SurfDescriptorExtractor()它效果很好.
我怎么解决这个问题?
OpenCV说:
OpenCV Error: Unsupported format or combination of formats (type=0
) in unknown function, file D:\Value\Personal\Parthenope\OpenCV\modules\flann\sr
c\miniflann.cpp, line 299
Run Code Online (Sandbox Code Playgroud)
han*_*ans 32
Flann需要描述符为CV_32F类型,因此您需要转换它们!find_object/example/main.cpp:
if(dbDescriptors.type()!=CV_32F) {
dbDescriptors.convertTo(dbDescriptors, CV_32F);
}
Run Code Online (Sandbox Code Playgroud)
可以工作;-)
使用ORB时,您应该像这样构建匹配器:
FlannBasedMatcher matcher(new cv::flann::LshIndexParams(5, 24, 2));
Run Code Online (Sandbox Code Playgroud)
我也看到过这个构造函数的建议:
FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));
Run Code Online (Sandbox Code Playgroud)
二进制字符串描述符- ORB、BRIEF、BRISK、FREAK、AKAZE 等。
浮点描述符- SIFT、SURF、GLOH 等。
通过比较二进制描述符的汉明距离与用于浮点描述符的欧几里得距离,可以有效地完成二进制描述符的特征匹配。
要比较 OpenCV 中的二进制描述符,请使用FLANN + LSH 索引或Brute Force + Hamming distance。
http://answers.opencv.org/question/59996/flann-error-in-opencv-3/
默认情况下,FlannBasedMatcher 用作具有 L2 规范的 KDTreeIndex。这就是为什么它与 SIFT/SURF 描述符配合良好并为 ORB 描述符抛出异常的原因。
| 归档时间: |
|
| 查看次数: |
16780 次 |
| 最近记录: |