c++opencvvectormatkeypoint

convert keypoints to mat or save them to text file opencv


I have extracted SIFT features in (opencv open source) and they are extracted as keypoints. Now, I would like to convert them to Matrix (With their x,y coordinates) or save them in a text file...

Here, you can see a sample code for extracting the keypoints and now I would like to know how convert them to MAT or save them in txt, xml or yaml...

cv::SiftFeatureDetector detector;
std::vector<cv::KeyPoint> keypoints;
detector.detect(input, keypoints);

Solution

  • Convert to cv::Mat is as follows.

    std::vector<cv::KeyPoint> keypoints;
    std::vector<cv::Point2f> points;
    std::vector<cv::KeyPoint>::iterator it;
    
    for( it= keypoints.begin(); it!= keypoints.end();it++)
    {
        points.push_back(it->pt);
    }
    
    cv::Mat pointmatrix(points);
    

    Write to filestorage is

    cv::FileStorage fs("test.yml", cv::FileStorage::WRITE);
    cv::FileStorage fs2("test2.xml", cv::FileStorage::WRITE);
    
    detector.write(fs);
    detector.write(fs2);