convert keypoints to mat or save them to text file opencv

邮差的信 提交于 2019-11-29 15:05:58

问题


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);

回答1:


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);



回答2:


Today I came across the same problem as per this question. The answer proposed by Appleman1234 is nice if you don't care about runtime. I believe for loops will always cost you dearly if you care about runtime. So I stumbled upon and found this interesting function (cv::KeyPoint::convert()) in OpenCV, which allows you to directly convert a vector of KeyPoints (std::vector<KeyPoint> keypoints_vector) into a vector of Point2f (std::vector<cv::Point2f> point2f_vector).

In your case, it can be used as follows:

std::vector<cv::KeyPoint> keypoints_vector; //We define vector of keypoints
std::vector<cv::Point2f> point2f_vector; //We define vector of point2f
cv::KeyPoint::convert(keypoints_vector, point2f_vector, std::vector< int >()); //Then we use this nice function from OpenCV to directly convert from KeyPoint vector to Point2f vector
cv::Mat img1_coordinates(point2f_vector); //We simply cast the Point2f vector into a cv::Mat as Appleman1234 did

For more details, refer this documentation here.



来源:https://stackoverflow.com/questions/7643342/convert-keypoints-to-mat-or-save-them-to-text-file-opencv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!