Ошибка YOU_MIXED_DIFFERENT_NUMERIC_TY при использовании PCL с VS 2010

Я компилирую программу на C ++ с открытым исходным кодом, которая использует PCL и OPENCV. Проблема, похоже, заключается в преобразовании типов между различными объектами Eigen.

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

Код про Эйгена в программе:

    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;

сообщение об ошибке:

1> c: \ program files (x86) \ pcl
1.6.0 \ 3rdparty \ eigen \ include \ eigen \ src \ core \ matrix.h (294): ошибка C2338:
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHODIC_TYPES_YOU_NEED_TO_USE_THE_CAST_METHODIC_OFF_CAST_METHOD_CAST_CAST_METHOD_BASE_OF: \ cpps \ win32project1 \ win32project1 \ Jointpointcloud.cpp (88): см.
ссылку на создание экземпляра шаблона функции
'Eigen :: Matrix ‹_Scalar, _Rows, _Cols> :: Matrix (const
Eigen :: MatrixBase &) 'компилируется 1> с 1> [1> _Scalar = float, 1> _Rows = 4, 1> _Cols = 4, 1> Derived = Eigen :: Matrix 1>] 1> f: \ cpps \ win32project1 \ win32project1 \ Jointpointcloud.cpp (88): см.
ссылку на создание экземпляра шаблона функции
'Eigen :: Matrix ‹_Scalar, _Rows, _Cols> :: Matrix (const
Eigen :: MatrixBase &)' компилируется 1 > с 1> [1> _Scalar = float, 1> _Rows = 4, 1> _Cols = 4, 1> Derived = Eigen :: Matrix 1>] ========== Сборка: 0 выполнено успешно, 1 не выполнено, 0 обновлено, 0 пропущено == ========


person user18441    schedule 28.09.2016    source источник
comment
Этот шаг может стать проблемой T = angle;. Вместо этого вы должны использовать T = (Eigen::Isometry3d)angle;   -  person The Apache    schedule 28.09.2016
comment
Не могли бы вы уточнить, какая строка на самом деле вызывает проблему? Строка, упомянутая @TheApache, не связана с преобразованием числового типа, поэтому я не думаю, что это причина ошибки.   -  person chtz    schedule 28.09.2016
comment
Добро пожаловать в StackOverflow! Пожалуйста, предоставьте нам дополнительную информацию о вашей проблеме. В частности, опубликуйте минимальный воспроизводимый пример и полное сообщение об ошибке, которое вы получаете . На основании предоставленной информации мы не можем сказать, в чем проблема.   -  person mindriot    schedule 28.09.2016
comment
Я обновил сообщение об ошибке.   -  person user18441    schedule 08.10.2016
comment
@TheApache Я обновил сообщение об ошибке. Сегодня решить не удалось.   -  person user18441    schedule 08.10.2016


Ответы (1)