OpenCV的和PCL冲突?(OpenCV and PCL conflict?)

2019-07-31 17:04发布

我使用OpenCV的2.4.2和点云中图书馆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'

所以它看起来像附带的OpenCV的弗莱恩文件越来越与PCL的弗莱恩文件有冲突。

有什么建议?

编辑

还有一个类似的问题在这里PCL,OpenCV的和FLANN冲突 ,但它是一个稍微不同的错误...

编辑2

所以在我的main.cpp文件我以前有

使用命名空间PCL; 使用命名空间的品种;

我评论这两个并更新程序使用CV ::垫等。

但我在编译过程仍然得到错误,当我加...

#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'

我只是试着重新命名包括\ opencv2 \ FLANN \包括\ opencv2 \ flanncv \和更新包括在一堆OpenCV头的这个新flanncv目录。 我仍然得到上面的错误...

Answer 1:

因此,对于这个修复程序,而无需重建的事情是一个空的命名空间添加到它

改变FLANN东西::实例:: FLANN ::东西

我认为这用途不同告诉它使用全局命名空间,而不是品种命名空间。



Answer 2:

那么I'm使用linux下的PCL和OpenCV但在这里不用

的问题是,既librarries被包括在头文件FLANN / flann.hpp或类似的东西,其中所述命名空间FLANN定义。

现在我不知道该库是如何安装到计算机上,但I'll假设你使用的PCL的和OpenCV的insallable版本,所以有自己的FLANN库中的每个人来。

通常在这两个库看到一只线搜索FLANN库的CMakeLists,是这样的:INCLUDE_LIBRARY($(FLANN)所需)

一个解决办法可能是删除这两个安装的库PCL和OpenCV。 然后下载并从他们的网站上安装FLANN。 然后下载OPENCV和PCL的每日构建,编译他们,他们都应该能够找到FLANN的同一个实例,因此问题可能得到解决

编辑:还有一个想法,也许问题很简单,因为你在你的代码中使用:

using namespace pcl;
using namespace cv;

所以你必须从FLANN命名空间中2个不同的实例。 同时删除“使用命名空间”,而是在代码中使用PCL :: thepclclass,CV :: theopencvclass,看看是否有所帮助

祝好运



Answer 3:

该解决方案是简单地增加这样的(双冒号::弗莱恩那么一切都将正常工作之前)。

例如,它是:

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

成为:

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


文章来源: OpenCV and PCL conflict?