OPENCV 2.4.9 cv2eigen 语义错误
Posted
技术标签:
【中文标题】OPENCV 2.4.9 cv2eigen 语义错误【英文标题】:OPENCV 2.4.9 cv2eigen semantic error 【发布时间】:2014-06-07 10:16:58 【问题描述】:我正在尝试使用 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)我得到以下编译错误:
无效参数的候选者 是: void cv2eigen(const cv::Matx &, ? &) void cv2eigen(const cv::Matx &, ? &) void cv2eigen(const cv::Matx &, ? &) void cv2eigen(const cv::Mat &, ? &) void cv2eigen(const cv::Matx &, ? &) 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 )
...
参数类型(即矩阵)似乎有问题,但我不知道是什么 - 相同的代码似乎对其他人有用。非常感谢任何帮助/提示!
P.S.:如果我忘记发布任何关键细节,我深表歉意,请告诉我,我会解决这个问题。
编辑 想我可能会提到它:我正在使用 ubuntu 附带的 stock gcc 版本 4.6.3。
【问题讨论】:
【参考方案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);
...
对于浮点数,您应该使用 MatrixXf 和 CV_32FC1 矩阵类型。
【讨论】:
对不起,对我不起作用,出现同样的错误。我试过不同的数字格式,产生的错误总是一样的。目前,我只是使用 Ela782 的解决方案(s.***.com/questions/14783329/…)作为 cv2eigen 和 eigen2cv 的替代品。以上是关于OPENCV 2.4.9 cv2eigen 语义错误的主要内容,如果未能解决你的问题,请参考以下文章