Я работаю в приложении для распознавания изображений и пытаюсь реализовать метод с использованием средства сопоставления дескрипторов Ferns.
Я обучаю структуры Ferns и сохраняю их, используя следующий код:
int main(int argc, char** argv) {
vector<string> trainFilenames;
readTrainFilenames(modelImagesList, imagesDir, trainFilenames);
Ptr<GenericDescriptorMatcher> descriptorMatcher = GenericDescriptorMatcher::create("FERN", params_filename);
SurfFeatureDetector detector(500);
SurfDescriptorExtractor extractor;
vector<vector<KeyPoint> > allKeypoints;
vector<Mat> allTrainImages;
//TRAIN AND SAVE
for(unsigned int i = 0; i < trainFilenames.size(); i++){
Mat sceneImage;
std::vector<KeyPoint> sceneKeypoints;
sceneImage = imread(trainFilenames.at(i), CV_LOAD_IMAGE_GRAYSCALE );
detector.detect( sceneImage, sceneKeypoints );
allKeypoints.push_back(sceneKeypoints);
allTrainImages.push_back(sceneImage);
}
std::string sceneImageData = "sceneImagedatamodel.xml";
FileStorage fs(sceneImageData, FileStorage::WRITE);
descriptorMatcher->add(allTrainImages, allKeypoints);
descriptorMatcher->train();
descriptorMatcher->write(fs);
fs.release();
}
Однако единственное, что я получаю в выходном файле, это:
<?xml version="1.0"?>
<opencv_storage>
<nclasses>0</nclasses>
<patchSize>31</patchSize>
<signatureSize>2147483647</signatureSize>
<nstructs>50</nstructs>
<structSize>9</structSize>
<nviews>1000</nviews>
<compressionMethod>0</compressionMethod>
</opencv_storage>
Разве я не должен был сохранить всю структуру в файле xml?
Кажется, я не могу найти никого, кто бы делал это с новым интерфейсом C ++.Эти методы действительно работают?Если так, ребята, у вас есть идеи, как заставить его работать?
Спасибо.