Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

bus error during reading from File

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include <time.h>


int main( int argc, char** argv )
{
  cv::Mat img_object = cv::imread( argv[1], 1);
  cv::Mat img_scene = cv::imread( argv[2], 1);

  std::vector<cv::KeyPoint> keypoints_object, keypoints_scene;
  cv::Mat descriptors_object; 
  cv::Mat descriptors_scene;

  int Threshl=60;
  int Octaves=4; //(pyramid layer) from which the keypoint has been extracted
  float PatternScales=1.0f;
  cv::BRISK detector2(Threshl,Octaves,PatternScales);
  detector2.create("Feature2D.BRISK");


  detector2.detect( img_object, keypoints_object );
  detector2.detect( img_scene, keypoints_scene );

  detector2.compute(img_object,keypoints_object,descriptors_object);
  detector2.compute(img_scene,keypoints_scene,descriptors_scene);

  std::cout<< descriptors_object.size() << std::endl;
  std::cout<< descriptors_object.isContinuous() << std::endl;

 cv::flann::Index idx2(descriptors_object, cv::flann::LshIndexParams(20,10,2) ,cvflann::FLANN_DIST_HAMMING);
 idx2.save("flann.bin"); 

  cv::Mat flann_descriptors(2075,64,0);
  cv::flann::SavedIndexParams idxfile("flann.bin");
  cv::flann::Index idx(flann_descriptors, idxfile ,cvflann::FLANN_DIST_HAMMING);

  cv::Mat indices,dists;
  idx.knnSearch(descriptors_scene,indices,dists,1);

  for(int i=0;i < indices.rows ; i++){
    std::cout << indices.at<int>(0,i) << "," << dists.at<int>(0,i)  << std::endl;
 }
}

The above code throws a bus error when index saved and read from file. The same code works when the index is created directly without using file.

bus error during while reading Flann Index from File

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include <time.h>


int main( int argc, char** argv )
{
  cv::Mat img_object = cv::imread( argv[1], 1);
  cv::Mat img_scene = cv::imread( argv[2], 1);

  std::vector<cv::KeyPoint> keypoints_object, keypoints_scene;
  cv::Mat descriptors_object; 
  cv::Mat descriptors_scene;

  int Threshl=60;
  int Octaves=4; //(pyramid layer) from which the keypoint has been extracted
  float PatternScales=1.0f;
  cv::BRISK detector2(Threshl,Octaves,PatternScales);
  detector2.create("Feature2D.BRISK");


  detector2.detect( img_object, keypoints_object );
  detector2.detect( img_scene, keypoints_scene );

  detector2.compute(img_object,keypoints_object,descriptors_object);
  detector2.compute(img_scene,keypoints_scene,descriptors_scene);

  std::cout<< descriptors_object.size() << std::endl;
  std::cout<< descriptors_object.isContinuous() << std::endl;

 cv::flann::Index idx2(descriptors_object, cv::flann::LshIndexParams(20,10,2) ,cvflann::FLANN_DIST_HAMMING);
 idx2.save("flann.bin"); 

  cv::Mat flann_descriptors(2075,64,0);
  cv::flann::SavedIndexParams idxfile("flann.bin");
  cv::flann::Index idx(flann_descriptors, idxfile ,cvflann::FLANN_DIST_HAMMING);

  cv::Mat indices,dists;
  idx.knnSearch(descriptors_scene,indices,dists,1);

  for(int i=0;i < indices.rows ; i++){
    std::cout << indices.at<int>(0,i) << "," << dists.at<int>(0,i)  << std::endl;
 }
}

The above code throws a bus error when index saved and read from file. The same code works when the index is created directly without using file.