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 语义错误的主要内容,如果未能解决你的问题,请参考以下文章

1-opencv 2.4.9下载地址

Visual Studio 2015 + OpenCV 2.4.9 开发环境搭建

OpenCV 库中的错误 - 2.4.9

84.ubuntu14.04安装opencv-2.4.9

Ubuntu 14.04 配置OpenCv 2.4.9

走近OPENCV // opencv 2.4.9+vs2013配置