我试图用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。
答案 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矩阵类型。