Je suis la compilation d'un programme opensource C++ qui utilise PCL et OpenCV. Le problème semble être la transformation de types entre différents objets Eigen.erreur YOU_MIXED_DIFFERENT_NUMERIC_TY en utilisant PCL avec VS 2010
c:\program files (x86)\pcl 1.6.0\3rdparty\eigen\include\eigen\src\core\matrix.h(294): error C2338:
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
Code en matière de Eigen dans le programme:
cv::Mat R;
cv::Rodrigues(result.rvec, R);
Eigen::Matrix3d r;
cv::cv2eigen(R, r);
// 将平移向量和旋转矩阵转换成变换矩阵
Eigen::Isometry3d T = Eigen::Isometry3d::Identity();
Eigen::AngleAxisd angle(r);
cout<<"translation"<<endl;
Eigen::Translation<double,3> trans(result.tvec.at<double>(0,0), result.tvec.at<double>(0,1), result.tvec.at<double>(0,2));
T = angle;
T(0,3) = result.tvec.at<double>(0,0);
T(1,3) = result.tvec.at<double>(0,1);
T(2,3) = result.tvec.at<double>(0,2);
// Transform point clouds
cout<<"converting image to clouds"<<endl;
PointCloud::Ptr cloud1 = image2PointCloud(frame1.rgb, frame1.depth, camera);
PointCloud::Ptr cloud2 = image2PointCloud(frame2.rgb, frame2.depth, camera);
// Combine point clouds
cout<<"combining clouds"<<endl;
PointCloud::Ptr output (new PointCloud());
pcl::transformPointCloud(*cloud1, *output, T.matrix()); // error occurs at this line, the compiler told.
*output += *cloud2;
message d'erreur:
1> c: \ program files (x86) \ pcl
1.6.0 \ 3ème partie \ e igen \ include \ eigen \ src \ core \ matrix.h (294): erreur C2338:
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_ TO_CAST_NUMERIC_TYPES_EXPLICITLY 1> f: \ CPPS \ win32project1 \ win32project1 \ jointpointcloud.cpp (88): voir
référence à la fonction instanciation de modèle
'Eigen :: matrice < _Scalar, _Rows, _Cols> :: Matrix (const
& Eigen :: MatrixBase)' en cours de compilation 1> avec 1> [ 1> = _Scalar flotteur, 1> _Rows = 4, 1> _Cols = 4, 1> = dérivée Eigen :: Matrice 1>] 1> f: \ CPPS \ win32project1 \ win32project1 \ jointpointcloud.cpp (88): voir
référence au modèle d'instanciation fonctionner
« Eigen :: matrice < _Scalar, _Rows, _Cols> :: Matrix (const
& Eigen :: MatrixBase) » en cours de compilation 1> avec 1> [ 1> = _Scalar flotteur, 1> _Rows = 4, 1> _Cols = 4, 1> = dérivé Eigen :: Matrice 1>] ========== Corpulence: 0 réussi, 1 a échoué, 0 mise à jour, 0 sautées ==========
Cette étape peut poser un problème 'T = angle;'. Au lieu de cela, vous devriez utiliser l'angle 'T = (Eigen :: Isometry3d);' –
Pourriez-vous être plus précis quelle ligne cause réellement le problème? La ligne mentionnée par @TheApache n'implique pas de conversion de type numérique, donc je ne pense pas que ce soit la raison de l'erreur. – chtz
Bienvenue dans StackOverflow! S'il vous plaît nous fournir plus d'informations sur votre problème. En particulier, veuillez envoyer un message [mcve] et le message d'erreur _full_ que vous obtenez. D'après les informations fournies, nous ne pouvons pas dire actuellement quel est le problème. – mindriot