C++ OpenCV和PCL冲突?
我正在使用OpenCV 2.4.2和点云库1.6.0 我的程序运行良好,直到我添加行C++ OpenCV和PCL冲突?,c++,visual-studio-2010,opencv,point-cloud-library,C++,Visual Studio 2010,Opencv,Point Cloud Library,我正在使用OpenCV 2.4.2和点云库1.6.0 我的程序运行良好,直到我添加行 #include <pcl/segmentation/segment_differences.h> 因此,OpenCV附带的Flann文件似乎与PCL中的Flann文件发生冲突 有什么建议吗 编辑 这里有一个类似的问题 但这是一个稍微不同的错误 编辑2 所以在我以前的main.cpp文件中 使用名称空间pcl; 使用名称空间cv 我注释掉了这两个,并更新了程序以使用cv::Mat等 但在编译过程中
#include <pcl/segmentation/segment_differences.h>
因此,OpenCV附带的Flann文件似乎与PCL中的Flann文件发生冲突
有什么建议吗
编辑
这里有一个类似的问题
但这是一个稍微不同的错误
编辑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'
#包括
C:\Program Files(x86)\PCL 1.6.0\include\PCL-1.6\PCL/kdtree/kdtree_flann.h(520):错误C2872:“flann”:符号不明确
可能是“法兰”
或“cv::flann”
我刚刚尝试将include\opencv2\flann\重命名为include\opencv2\flanncv\并将一堆opencv头中的include更新到这个新的flanncv目录。我仍然得到上面的错误 我在linux下使用pcl和openCv,但这里是 问题是两个库都包含头文件flann/flann.hpp或类似文件,其中定义了名称空间flann 现在我不知道这些库是如何安装在您的机器上的,但我假设您使用了可插入版本的pcl和openCv,因此每一个都有自己的flann库 通常在两个库的CMakeLists中都有一行用于搜索flann库,例如:INCLUDE_LIBRARY($(flann)REQUIRED) 解决方案可能是删除两个已安装的库pcl和openCv。然后从他们的网站下载并安装flann。然后下载openCv和pcl的夜间构建,编译它们,它们都应该能够找到相同的flann实例,因此问题可能会得到解决 编辑: 还有一个想法,可能问题仅仅是因为您在代码中使用了:
using namespace pcl;
using namespace cv;
因此,您有两个来自flann命名空间的不同实例。删除“using namespace”并在代码pcl::thepclclass、cv::TheocpenvClass中使用,看看这是否有帮助
祝你好运因此,在不必重建的情况下解决这个问题的一个方法是向它添加一个空名称空间 更改的实例 法兰:什么 到 ::弗兰:什么
我认为它有效地告诉它使用全局名称空间而不是cv名称空间。解决方案就是在flann之前添加双冒号(
:
)
然后一切都会好起来的
例如,它是:
flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
flann::Matrix(新的元素类型[size\u*dim\ux],size\ux,dim\ux);
成为:
::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
::flann::Matrix(新元素类型[size\u*dim\ux],size\ux,dim\ux);
ahh。这是一个严重的错误。你是如何安装pcl和opencv的?也许你可以从源代码处编译它们,并使它们指向相同的flann安装?我使用了它们都提供的windows安装程序。我想我可以试着编译它们以使用相同的flann文件,但我不确定如何编译。每个文件都有一个自述文件,展示了如何编译HMM。我不太幸运,用我尝试过的方法编辑了上面的内容。我在linux上使用pcl和openCv,在一个项目中没有问题。问题是,它们都依赖于相同版本的flann。我敢肯定,如果您设法分别安装了flann,然后下载并编译了pcl和openCv,以依赖于此安装版本的flann,您可能会得到问题的解决方法。openCv和pcl使用相同的flann文件,或者它们是否经过调整以与openCv或pcl一起使用?在我使用#include之前,他们一直在愉快地合作。据我所知,他们只是使用flann库,没有任何改动,但你可以在pcl列表上询问,因为flann的作者是一名活跃成员。我在Ubuntu 14.04上遇到了OpenCV pcl flann冲突问题,OpenCV 3.2和pcl 1.7-省略了“使用命名空间cv;”在简历前加上前缀:到处都对我有用。这个答案更简单:好吧,如果这个方法有效,那么这个工作就做得很好。我今天学到了一些东西,问题是OpenCV自带了自己的flann,它与PCL所依赖的flann冲突。我还尝试重命名名称空间,但由于某些原因,它无法工作,但编辑包含路径就可以了。然而,较新的PCL1.7通过将名称空间从flann::改为::flann::,避免了这个问题,这是一个更整洁的解决方案!
::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);