PCL과 OPENCV를 사용하는 opensource C++ 프로그램을 컴파일하고 있습니다. 문제는 다른 Eigen 객체 사이의 유형 변환 인 것 같습니다.VS 2010에서 PCL을 사용할 때 YOU_MIXED_DIFFERENT_NUMERIC_TY 오류가 발생했습니다.
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 : \ 프로그램 파일 (86) \ PCL
1.6.0 \ 3rdparty \ e 오류 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) : 함수
참조 참조 IGEN \는 \ 고유 \ SRC \ 코어 \의 matrix.h (294)를 포함 템플릿 인스턴스화
'아이겐 :: 매트릭스 < _Scalar, _Rows, _Cols> :: 매트릭스 (아이겐 :: MatrixBase &가
CONST)' 1 컴파일되는> 1> [ 1> _Scalar = 플로트와, 1> _Rows = 4, 1> _Cols = 4,,210 1> = 파생 아이겐 :: 매트릭스 1>] 1> F : \ CPPS \ win32project1 \ win32project1 \ jointpointcloud.cpp (88) 템플릿 인스턴스화
'아이겐 :: 매트릭스 < _Scalar 기능하도록
기준을 참조 _Rows, _Cols> :: 매트릭스 (CONST
아이겐 :: MatrixBase &는 ) "컴파일되는 1> 1> [ 1> = _Scalar 플로트와 1> _Rows = 4 1> _Cols = 4 1> Derived = Eigen :: Matrix 1>] ========== 빌드 : 0 성공, 1 실패, 0 최신, 0 건너 뛰기 ==========
이 단계는'T = angle;'문제 일 수 있습니다. 대신에'T = (Eigen :: Isometry3d) angle;을 사용해야합니다. –
어떤 라인이 실제로 문제를 일으키는 지 자세히 설명해 주시겠습니까? @TheApache에 언급 된 행은 숫자 형식 변환을 포함하지 않으므로 오류의 원인이라고 생각하지 않습니다. – chtz
StackOverflow에 오신 것을 환영합니다! 문제에 대한 추가 정보를 제공해주십시오. 특히, [mcve]와 _full_ 오류 메시지를 게시하십시오. 제공된 정보를 통해 현재 문제가 무엇인지 알 수 없습니다. – mindriot