2015-01-08 7 views
1

Я обнаруживаю функции SURF в изображении, а затем записываю их в файл yml. Затем я хочу снова загрузить функции из файла yml, чтобы попытаться обнаружить объект, но в настоящий момент у меня возникают проблемы с загрузкой ключевых точек, чтобы нарисовать их на изображении.Загрузка сохраненных ключевых точек SURF

Я пишу так, как ключевые точки:

cv::FileStorage fs("keypointsVW.yml", cv::FileStorage::WRITE); 
write(fs, "keypoints_1", keypoints_1); 
fs.release(); 

Я пытаюсь читать их так:

cv::FileStorage fs2("keypointsVW.yml", cv::FileStorage::READ); 
read(fs2, "keypoints_1", keypoints_1); 
fs2.release(); 

Но это вызывает множество ошибок.

Обнаружение и сделать код:

cv::Mat img_1 = cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); 
    int minHessian = 400; 
    cv::SurfFeatureDetector detector(minHessian); 
    std::vector<cv::KeyPoint> keypoints_1; 
    detector.detect(img_1, keypoints_1); 
    cv::Mat img_keypoints_1; 
    //......write code 
    //.......read code 
    drawKeypoints(img_1, keypoints_1, img_keypoints_1); 
    imshow("keypoints_1", img_keypoints_1); 

ответ

2

Найдено решение, я выложу его здесь, в случае, если кто-то имеет такую ​​же проблему.

std::vector<cv::KeyPoint> testPoints; 
cv::FileStorage fs2("keypointsVW.yml", cv::FileStorage::READ); 
cv::FileNode kptFileNode = fs2["keypointsVW"]; 
read(kptFileNode, testPoints); 
fs2.release();