我正在尝试这个简单的测试来检查我是否可以将预填充的索引存储到文件中并在以后加载它们。保存和加载的垫子是不同的。此外,knnSearch 在匹配过程中会引发段错误。我仅在使用 LSHIndexParams(用于二进制功能)时才看到此问题。
void flannSaveAndLoadTest(Mat descriptor) {
// construct an index
flann::LshIndexParams lshIndexParams(20,10,2);
flann::Index kdtree(descriptor, lshIndexParams, cvflann::FLANN_DIST_HAMMING);
// save descriptors to file
writeMatToFile(descriptor, "before_index_save.dat");
// save index to file
kdtree.save("index.dat");
// load index from file
Mat mat = Mat(descriptor.rows, descriptor.cols, CV_8UC1);
flann::Index kdtree1(mat, flann::SavedIndexParams("index.dat"), cvflann::FLANN_DIST_HAMMING);
// save loaded mat
writeMatToFile(mat, "after_index_save.dat");
// search in this tree
Mat dists = Mat(descriptor.rows, 2, CV_32S);
Mat indices = Mat(descriptor.rows, 3, CV_32S);
kdtree1.knnSearch(descriptor, indices, dists, 2);
}
before_index_save:
%YAML:1.0 垫子:!!opencv 矩阵 行数:60 列数:32 dt:你 数据: [ 10, 157, 16, 137, 81, 214, 178, 39, 45, 5, 74, 1, 172, 30, 38, 196、144、59、131、33、84、152、17、223、39、52、10、67、18、6、 141、206、11、91、50、141、119、86、190、48、45、76、94、167、236、 30、183、228、246、125、151、231、197、144、49、236、39、125、138、 131、14、63、61、223、15、95、35、135、119、30、190、168、45、232、 91、231、204、94、159、228、246、93、147、231、197、144、125、238、 38、60、143、135、14、55、57、213、10、149、16、129、81、214、178、 39、45、5、74、1、172、30、6、196、144、27、131、33、22、152、17、 207、39、52、10、67、18、6、141、206、124、236、196、30、137、161、 70、207、210、179、169、24、99、225、105、158、9、226、104、26、 58、111、142、51、184、134、85、124、243、123、210、8、10、0、16、 129、81、214、176、3、45、5、66、1、140、30、38、196、128、25、 131、1、4、152、17、196、7、20、26、67、2、4、13、206、244、172、 157、122、137、237、69、206、210、179、161、24、115、241、73、27、 9、226、104、26、58、111、218、51、217、131、85、124、240、121、 198、34、197、36、157、103、128、46、103、184、112、162、43、88、 215、115、9、123、17、68、104、106、49、212、217、10、237、166、 101、20、192、115、2、32、252、188、189、118、137、124、85、158、 179、247、166、24、223、247、75、59、129、214、236、26、56、103、 251、32、219、251、85、63、194、113、198、114、196、64、157、39、 1、78、38、8、40、178、35、8、214、115、73、27、144、84、104、98、 96、212、217、8、197、178、65、20、0、115、3、34、11、91、50、141、 119、86、191、48、13、76、94、167、236、30、183、228、246、125、
after_index_save:
%YAML:1.0 垫子:!!opencv 矩阵 行数:60 列数:32 dt:你 数据: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 100, 101, 120, 95, 115, 97, 118, 101, 46, 100, 97, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 0, 0, 152, 169, 51, 241, 97, 127, 0, 0, 152, 169, 51, 241, 97, 127, 0, 0, 0, 0, 0, 0, 98, 101, 102, 111, 114, 101, 95, 105, 110, 100, 101, 120, 95, 115, 97, 118, 101, 46, 100, 97, 116, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 188, 45, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,