[C++] Conversion de 3x1 ou 1x3 cv :: Mat en cv :: Point3d?


Answers

Question

J'ai affaire à un code dans lequel on fait beaucoup de multiplications matricielles 3x3 et aussi une traduction de points 3d en utilisant des matrices de rotation, etc. J'ai décidé d'utiliser les fonctionnalités de base d'OpenCV pour les opérations mathématiques. La possibilité d'utiliser le constructeur récent ajouté à la classe cv::Mat pour convertir un cv::Point3d directement en un cv::Mat 3x1 réduit et simplifie grandement le code.

Ce que je me demande maintenant est s'il y a un moyen simple de convertir un cv::Mat 3x1 ou 1x3 en un cv::Point3d ? Je peux toujours faire quelque chose comme:

cv::Mat mat(3,1,CV_64FC1);
cv::Point3d p (mat.at<double>(0,0), mat.at<double>(1,0), mat.at<double>(2,0));

ou

cv::Mat mat(3,1,CV_64FC1);
const double *data = mat.ptr<double>(0);
cv::Point3d p (data[0], data[1], data[2]);

Je suis très inquiet de la performance (évitez les 3 appels at méthode).