Сегодня я столкнулся с той же проблемой, что и в этом вопросе. Ответ, предложенный Appleman1234, хорош, если вас не волнует время выполнения. Я считаю, что для циклов всегда будет стоить вам дорого, если вы заботитесь о времени выполнения. Поэтому я наткнулся на и нашел эту интересную функцию (cv::KeyPoint::convert()
) в OpenCV, которая позволяет напрямую преобразовывать вектор KeyPoints (std::vector<KeyPoint> keypoints_vector
) в вектор Point2f (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
Подробнее см. В документации здесь .