![](/img/trans.png)
[英]Error converting cv::Mat1f to Eigen::MatrixXf with cv2eigen?
[英]OPENCV 2.4.9 cv2eigen semantic error
我正在尝试使用cv2eigen将cv :: Mat转换为Eigen :: Mat,然后使用eigen2cv转换回我(我知道最好为此使用Eigen :: Map,但这是另一回事)。
我在ubuntu 12.04 LTS上将OpenCV 2.4.9和eigen3 3.0.5与Eclipse 3.7.2结合使用
但是,即使是简单的例子
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
using namespace Eigen;
int main() {
cv::Mat_<float> a = Mat_<float>::ones(2,2);
Eigen::Matrix<float,Dynamic,Dynamic> b;
cv2eigen(a,b);
return 0;
}
(主体取自cv :: Mat转换为Eigen-Matrix并返回 )我得到以下编译错误:
无效的参数'候选者为:void cv2eigen(const cv :: Matx <#0,1,#1>&,?&)void cv2eigen(const cv :: Matx <#0,#1,#2>&,?& )void cv2eigen(const cv :: Matx <#0,#1,1>&,?&)void cv2eigen(const cv :: Mat&,?&)void cv2eigen(const cv :: Matx <#0,#1 ,#2>&,?&)void cv2eigen(const cv :: Mat&,?&)'simpleExample.cpp / simpleExample_proj-Debug @ build / [源目录]第17行语义错误
我偷看了opencv2 / core / eigen.hpp并假设我要调用的方法如下:
template<typename _Tp>
void cv2eigen( const Mat& src,
Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )
{
...
}
似乎参数的类型(即矩阵)有问题,但我无法弄清楚-相同的代码似乎对其他人有用。 任何帮助/提示将不胜感激!
PS:如果我忘了发布任何重要细节,我很抱歉,请告诉我,我会解决的。
编辑我可能会提到它:我正在使用ubuntu随附的股票gcc版本4.6.3。
这对我有用:
#define EIGEN_RUNTIME_NO_MALLOC // Define this symbol to enable runtime tests for allocations
...
Mat src(N_rows,N_cols,CV_64FC1);
MatrixXd X=MatrixXd(src.rows,src.cols);
// openCV -> Eigen
cv2eigen(src,X);
...
对于float,应使用MatrixXf和CV_32FC1矩阵类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.