Я хочу использовать LSH для ускорения поиска, и я обнаружил, что в opencv flann это можно сделать с помощью LshIndexParams? Проблема в том, что я не могу получить правильный формат. я использую мешок слов, чтобы создать
Матовый вывод и кормить его на фланг, но я получаю ошибки все время.
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
Что (): /home/vampire/opencv-2.4.8/modules/flann/src/miniflann.cpp:315: ошибка: (-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));
и я также пытался преобразовать в другой тип, никто не работает, кто-нибудь знает, как это сделать?
и после того, как я получу результат, как я могу узнать, соответствует ли он?
Попробуй. Я думаю, что у меня была та же ошибка, мой работает с дополнительным параметром:
cv::flann::Index kVecinos(descriptors, cv::flann::LshIndexParams(12, 20, 2), cvflann::FLANN_DIST_HAMMING);
в cvflann есть и другие подобные cvflann::FLANN_DIST_EUCLIDEAN
Других решений пока нет …