C++ 加载保存的SURF关键点

C++ 加载保存的SURF关键点,c++,opencv,feature-detection,surf,C++,Opencv,Feature Detection,Surf,我在图像中检测冲浪特征,然后将它们写入yml文件。然后我想再次从yml文件中加载特征,以尝试检测对象,但目前我在加载关键点以在图像上绘制它们时遇到了问题 我这样写关键点: cv::FileStorage fs("keypointsVW.yml", cv::FileStorage::WRITE); write(fs, "keypoints_1", keypoints_1); fs.release(); 我试着这样读: cv::FileStorage fs2("keypointsVW.yml",

我在图像中检测冲浪特征,然后将它们写入
yml
文件。然后我想再次从
yml
文件中加载特征,以尝试检测对象,但目前我在加载关键点以在图像上绘制它们时遇到了问题

我这样写关键点:

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);
cv::Mat img\u 1=cv::imread(argv[1],cv\u LOAD\u IMAGE\u灰度);
int minHessian=400;
cv::SurfFeatureDetector检测器(minHessian);
std::向量关键点_1;
检测器。检测(img_1,关键点_1);
cv::Mat img_关键点_1;
//……编写代码
//……读取代码
绘图关键点(img_1、关键点_1、img_关键点_1);
imshow(“关键点1”,img\u关键点1);

找到了解决方案,我将在这里发布,以防其他人也有同样的问题

std::vector<cv::KeyPoint> testPoints;
cv::FileStorage fs2("keypointsVW.yml", cv::FileStorage::READ);
cv::FileNode kptFileNode = fs2["keypointsVW"];
read(kptFileNode, testPoints);
fs2.release();
std::向量测试点;
cv::FileStorage fs2(“keypointsVW.yml”,cv::FileStorage::READ);
cv::FileNode kptFileNode=fs2[“keypointsVW”];
读取(kptFileNode、测试点);
fs2.释放();