OPENCV 2.4.9 cv2eigen语义错误

时间:2014-06-07 10:16:59

标签: c++ opencv

我试图用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 conversion to Eigen-Matrix and back的主体)我得到以下编译错误:

  

无效的参数&#39;候选人   是:void cv2eigen(const cv :: Matx&lt;#0,1,#1&gt;&amp;,?&amp;)void cv2eigen(const   CV :: MATX&LT;#0,#1,#2 - ; &amp ;,? &amp;)void cv2eigen(const cv :: Matx&lt;#0,#1,1&gt;&amp;,?   &amp;)void cv2eigen(const cv :: Mat&amp;,?&amp;)void cv2eigen(const   CV :: MATX&LT;#0,#1,#2 - ; &amp ;,? &amp;)void cv2eigen(const cv :: Mat&amp;,?&amp;)   &#39; simpleExample.cpp / simpleExample_proj-Debug @ build / [Source   目录]第17行语义错误

我看了一下opencv2 / core / eigen.hpp,并假设我要调用的方法是以下方法:

    template<typename _Tp>
    void cv2eigen( const Mat& src,
                   Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )
    {
        ...
    }

参数&#39;看起来有问题。类型,即矩阵,但我无法弄清楚是什么 - 相同的代码似乎适用于其他人。非常感谢任何帮助/提示!

P.S。:如果我忘了发布任何关键细节,我很抱歉,请告诉我,我会解决这个问题。

修改 我想我可能会提到它:我使用的是ubuntu附带的gcc版本4.6.3。

1 个答案:

答案 0 :(得分:1)

这对我有用:

#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矩阵类型。