1

我正在尝试这个简单的测试来检查我是否可以将预填充的索引存储到文件中并在以后加载它们。保存和加载的垫子是不同的。此外,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,
4

0 回答 0