今日、私はこの質問と同じ問題に遭遇しました。ランタイムを気にしないのであれば、Appleman1234によって提案された答えは素晴らしいです。ランタイムを気にするなら、forループは常にあなたにかなりの費用がかかると私は信じています。そこで私は、OpenCVでこの興味深い関数()を見つけました。これにより、KeyPoints( )のcv::KeyPoint::convert()
ベクトルをPoint2f()のベクトルに直接変換できます。std::vector<KeyPoint> keypoints_vector
std::vector<cv::Point2f> point2f_vector
あなたの場合、それは次のように使用することができます:
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
詳細については、こちらのドキュメントを参照してください。