1。提取的sift 描述符是float,所以要访问每一个数据的话
for (int r = 0;r<descriptors.rows;r++){ const float *dpt = descriptors.ptr<float>(r); for(int c = 0;c<descriptors.cols;c++){ ftrain<<(dpt[c]); if(c<descriptors.cols-1) ftrain<<" "; else ftrain<<std::endl; } }
3.提取sift特征的代码
1)
Mat mask; int _nfeatures=0; int _nOctaveLayers=3; double _contrastThreshold=0.04; double _edgeThreshold=10; double _sigma=1.6; SIFT sift(_nfeatures,_nOctaveLayers,_contrastThreshold,_edgeThreshold, _sigma); // vector<KeyPoint> keypoints; bool useProvidedKeypoints=false; // Mat descriptors; sift(image, mask, keypoints, descriptors, useProvidedKeypoints);
2)
SiftFeatureDetector detector; SiftDescriptorExtractor extractor; detector.detect(image,keypoints); extractor.compute(image,keypoints,descriptors);