使用LshIndexParams,flann索引需要什么类型的数据?

时间:2014-01-13 07:25:56

标签: c++ opencv flann

我想使用LSH来加速搜索,我在opencv中发现flann可以通过使用LshIndexParams来做到这一点吗?问题是我无法获得正确的格式。我用一袋文字来生成一个 mat输出并将其提供给flann,但我一直都会出错。

OpenCV Error: Unsupported format or combination of formats (type=2

)在buildIndex_,文件/home/vampire/opencv-2.4.8/modules/flann/src/miniflann.cpp,第315行 在抛出'cv :: Exception'的实例后终止调用   what():/ home / vampire / opencv-2.4.8 / modules / flann / src / miniflann.cpp:315:error:( - 210)type = 2  在函数buildIndex _

部分代码喜欢这个:

    Mat img_BOWdescriptor=BOW_descriptors(path);
cout<<img_BOWdescriptor<<endl;
img_BOWdescriptor.convertTo(img_BOWdescriptor,img_BOWdescriptor.rows,img_BOWdescriptor.cols,CV_32F);
cout<<img_BOWdescriptor<<endl;
cout<<"done"<<endl;

cout<<"ini flann index......"<<endl;
Mat indices = Mat(img_BOWdescriptor.rows, 1, CV_32S);
Mat dist = Mat(img_BOWdescriptor.rows, 1, CV_32F);
descriptors_all.convertTo(descriptors_all,descriptors_all.rows,descriptors_all.cols,CV_32F);

flann::Index* flann_index=new flann::Index(descriptors_all,flann::LshIndexParams(20,10,2));
cout<<"done"<<endl;
double t=(double)getTickCount();

cout<<"flann matching......"<<endl;
flann_index->knnSearch(img_BOWdescriptor, indices, dist, 1,flann::SearchParams(32));

我还尝试转换为其他类型,没有人工作,有没有人知道怎么做? 在得到结果后,我怎么知道它是否匹配?

1 个答案:

答案 0 :(得分:0)

试一试。我想我有同样的错误,我使用额外的参数:

cv::flann::Index kVecinos(descriptors, cv::flann::LshIndexParams(12, 20, 2), cvflann::FLANN_DIST_HAMMING);

在cvflann中还有其他像cvflann::FLANN_DIST_EUCLIDEAN