2012-03-26 3 views
7

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

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 

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

+0

Вы забыли '-I/usr/include/eigen3' в вашем приложении OpenCV? –

+0

Нет. Я компилирую свое приложение OpenCV с помощью следующей команды: 'g ++ -I/usr/include/eigen3 -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -g Read.cpp -o Read' – garak

ответ

7

я просто должен был включать в себя

#include <Eigen/Dense> 

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

1

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

Далее можно попытаться удалить с помощью пространств имен

using namespace cv; 
    using namespace std; 
    using namespace Eigen; 
+0

Я могу видеть, что заголовки библиотеки Eigen3 находятся на месте/usr/include/eigen3, и я могу их использовать. Можете ли вы рассказать о том, как использовать CMakeList.txt или перенаправить меня на ссылку? – garak

Смежные вопросы