首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与VS 2010一起使用PCL的YOU_MIXED_DIFFERENT_NUMERIC_TY错误

与VS 2010一起使用PCL的YOU_MIXED_DIFFERENT_NUMERIC_TY错误
EN

Stack Overflow用户
提问于 2016-09-28 07:04:56
回答 1查看 1.8K关注 0票数 0

我正在编写一个开源c++程序,它使用PCL和OPENCV。问题似乎是不同特征对象之间的类型转换。

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

程序中关于特征的代码:

代码语言:javascript
运行
复制
    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文件(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_METHOD_OF_MATRIXBASE_ TO_CAST_NUMERIC_TYPES_EXPLICITLY 1> f:\cpps\win32project1\win32project1\jointpointcloud.cpp(88):见 函数模板实例化引用 'Eigen::Matrix<_Scalar,_Rows,_Cols>::Matrix(康斯特 f:\cpps\win32project1\win32project1\jointpointcloud.cpp(88)::MatrixBase&)正在编译的1>与1> 1> _Scalar=float,1> _Rows=4,1> _Cols=4,1> Derived=Eigen::Matrix 1> 1> _Scalar=float:见 函数模板实例化引用 'Eigen::Matrix<_Scalar,_Rows,_Cols>::Matrix(康斯特 正在编译的1>与1> 1> _Scalar=float,1> _Rows=4,1> _Cols=4,1> Derived=Eigen::Matrix 1> ==========构建:0成功,1失败,0最新,0跳==========

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 14:21:24

PCL1.6中的transformPointCloud方法期望转换矩阵是浮点格式(链接)。你需要写

代码语言:javascript
运行
复制
pcl::transformPointCloud( *cloud1, *output, T.cast<float>() );

.matrix()转换实际上是不必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39740276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档