OpenCV и PCL конфликтуют?

Я использую OpenCV 2.4.2 и Point Cloud Library 1.6.0.

Моя программа работает нормально, пока я не добавлю строку …

#include <pcl/segmentation/segment_differences.h>

Это вызывает ошибки, когда я пытаюсь скомпилировать. Я получил…

Error   93  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  424
Error   94  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  425
Error   95  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  427
Error   96  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  514
Error   97  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  520

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or       'cv::flann'

Таким образом, похоже, что файлы Flann, поставляемые с OpenCV, конфликтуют с файлами Flann в PCL.

Какие-либо предложения?

редактировать

Здесь есть похожий вопрос
PCL, OpenCV и фланговый конфликт
но это немного другая ошибка …

Редактировать 2

так в моем файле main.cpp у меня ранее был

использование пространства имен pcl;
используя пространство имен cv;

Я закомментировал эти два и обновил программу для использования cv :: Mat и т. Д.

но я все еще получаю ошибки во время компиляции, когда я добавляю …

#include <pcl/segmentation/segment_differences.h>

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or       'cv::flann'

Я только что попытался переименовать include \ opencv2 \ flann \, чтобы включить \ opencv2 \ flanncv \, и обновить include в связке заголовков opencv в этот новый каталог flanncv. Я все еще получаю вышеуказанную ошибку …

3

Решение

Так что исправление для этого без необходимости перестраивать вещи — добавить к нему пустое пространство имен.

изменить экземпляры
Flann :: что-то
в
:: Flann :: что-то

Я думаю, что это эффективно говорит ему использовать глобальное пространство имен, а не пространство имен cv.

3

Другие решения

Ну, я использую pcl и openCv под Linux, но здесь идет

Проблема состоит в том, что обе библиотеки включают заголовочный файл flann / flann.hpp или что-то подобное, где определено пространство имен flann.

Теперь я не знаю, как библиотеки установлены на вашем компьютере, но я предполагаю, что вы использовали непобедимую версию pcl и openCv, поэтому каждая из них шла со своей собственной фланевой библиотекой.

Обычно в списках CMakeList обеих библиотек есть строка для поиска во фланговых библиотеках, что-то вроде: INCLUDE_LIBRARY ($ (flann) REQUIRED)

Решением может быть удаление двух установленных библиотек pcl и openCv. затем скачайте и установите приложение фланн с их сайта. затем загрузите ночные сборки openCv и pcl, скомпилируйте их, и они оба смогут найти один и тот же экземпляр flann, поэтому проблема может быть решена

Редактировать:
Еще одна идея, может быть, проблема в том, что вы использовали в своем коде:

using namespace pcl;
using namespace cv;

и поэтому у вас есть 2 разных экземпляра из флангового пространства имен. удалите оба «используя пространство имен» и используйте вместо этого в своем коде pcl :: thepclclass, cv :: theopencvclass и посмотрите, поможет ли это

удачи

0

Решение просто состоит в том, чтобы добавить двойное двоеточие, как это (::) перед флан
Тогда все будет хорошо работать.

Например, это было:

flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);

стали:

::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
0
По вопросам рекламы [email protected]