Использование библиотеки Eigen с OpenCV 2.3.1

у меня проблемы с использованием Eigen3 библиотека вместе с OpenCV приложения C++. Я установил библиотеку Eigen3 на свой Ubuntu, используя следующую команду:

sudo apt-get install libeigen3-dev

Я могу компилировать и использовать примеры приложений Eigen3 (библиотека Eigen3 установлена и работает), когда я использую следующую команду для компиляции.

g++ -I/usr/include/eigen3 Eig.cpp -o Eig

Я хочу использовать установленную библиотеку Eigen с В формате OpenCV.

я скомпилировал источник OpenCV со следующими флагами:

cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON USE_EIGEN=/usr/include/eigen3 ..

мой код OpenCV включает следующие заголовки и пространство имен:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <assert.h>
#include <opencv2/core/eigen.hpp>

using namespace cv;
using namespace std;
using namespace Eigen;

однако, когда я обычно компилирую приложение OpenCV, мой компилятор дает мне следующую ошибку:

In file included from Read.cpp:6:
/usr/local/include/opencv2/core/eigen.hpp:54: error: expected ‘,’ or ‘...’ before ‘::’ token
/usr/local/include/opencv2/core/eigen.hpp: In function ‘void cv::eigen2cv(int)’:
/usr/local/include/opencv2/core/eigen.hpp:56: error: ‘src’ was not declared in this scope
/usr/local/include/opencv2/core/eigen.hpp:56: error: ‘Eigen’ is not a class or namespace
/usr/local/include/opencv2/core/eigen.hpp:60: error: ‘dst’ was not declared in this scope
/usr/local/include/opencv2/core/eigen.hpp:66: error: ‘dst’ was not declared in this scope

как решить эту проблему?

2 ответов


Мне просто нужно было включить

#include <Eigen/Dense>

перед включением заголовков OpenCV это все. Я скомпилировал их, включив собственные заголовки lib и заголовки OpenCV lib.


сначала я бы дважды проверил, что найдены собственные направления включения. Вы можете использовать CMakeList.txt для этого (и вы должны использовать функции cmake для поиска заголовков и ссылок на библиотеки вместо флагов компилятора)

Далее вы можете попытаться удалить using namespaces

    using namespace cv;
    using namespace std;
    using namespace Eigen;