作者:liaojiacai
邮箱: ljc_v2x_adas@foxmail.com
opencv中对角点检测时需要将vector<KeyPoint>与vector<point2f>之间进行转换
这个在opencv版本里面自带了相关的转换函数
1、KeyPoint 转point2f
CV_WRAP static void convert(const std::vector<KeyPoint>& keypoints,
CV_OUT std::vector<Point2f>& points2f,
const std::vector<int>& keypointIndexes=std::vector<int>());
使用实例:
KeyPoint::convert(keypoints,point2f, 1, 1, 0, -1);
2、point2f 转KeyPoint
CV_WRAP static void convert(const std::vector<Point2f>& points2f,
CV_OUT std::vector<KeyPoint>& keypoints,
float size=1, float response=1, int octave=0, int class_id=-1);
使用实例:
KeyPoint::convert(point2f, keypoint, 1, 1, 0, -1);
从上面看到:这两个转换函数名是一样的,所以重载了,输入的参数顺序不同功能不同
另外,可以根据自己的需要,单独的使用自己写的转换函数来转换KeyPoint到Point
下面时根据参考写出自己的转换函数:
void KeyPointsToPoints(vector<KeyPoint> kpts, vector<Point2f> &pts)
{
for (int i = 0; i < kpts.size(); i++) {
pts.push_back(kpts[i].pt);
}
}
void PointsToKeyPoints(vector<Point2f>pts,vector<KeyPoint>kpts)
{
for (size_t i = 0; i < pts.size(); i++) {
kpts.push_back(KeyPoint(pts[i], 1.f));
}
}
参考:How can I convert vector<Point2f> to vector<KeyPoint>? - OpenCV Q&A Forum
http://answers.opencv.org/question/24623/how-can-i-convert-vectorpoint2f-to-vectorkeypoint/