【问题标题】:OpenCV and PCL conflict?OpenCV 和 PCL 冲突?
【发布时间】:2012-09-10 23:09:29
【问题描述】:

我正在使用 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 附带的 Flann 文件与 PCL 中的 Flann 文件发生冲突。

有什么建议吗?

编辑

这里有一个类似的问题 PCL, OpenCV and flann conflict 但这是一个略有不同的错误......

编辑 2

所以在我之前的 main.cpp 文件中

使用命名空间 pcl; 使用命名空间简历;

我将这两个注释掉并更新了程序以使用 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\ 重命名为 include\opencv2\flanncv\ 并将一堆 opencv 标头中的包含更新到这个新的 flanncv 目录。我仍然收到上述错误...

【问题讨论】:

  • 啊。这是一个令人讨厌的错误。你是如何安装 pcl 和 opencv 的?也许你可以从源代码编译并让它们指向同一个 flann 安装?
  • 我使用了他们都提供的 Windows 安装程序。我想我可以尝试编译它们以使用相同的 flann 文件,但我不确定如何。
  • 有一个自述文件,每个文件显示如何编译

标签: c++ visual-studio-2010 opencv point-cloud-library


【解决方案1】:

因此,无需重建即可解决此问题的方法是为其添加一个空命名空间

更改实例 弗兰::某事 到 ::flann::某事

我认为它有效地告诉它使用全局命名空间而不是 cv 命名空间。

【讨论】:

  • 如果这行得通,那么工作做得很好。我今天学到了一些东西
  • 问题是,OpenCV 带有自己的 flann,它与 PCL 所依赖的 flann 冲突。我还尝试重命名命名空间,但由于某种原因它不起作用,但编辑包含路径就可以了。然而,较新的 PCL 1.7 通过将命名空间从 flann:: 更改为 ::flann:: 来避免这个问题,这是更简洁的解决方案!
【解决方案2】:

好吧,我在 linux 下使用 pcl 和 openCv,但这里是

问题是两个库都包含头文件 flann/flann.hpp 或类似的东西,其中定义了命名空间 flann。

现在我不知道这些库是如何安装在你的机器上的,但我假设你使用了可安装的 pcl 和 openCv 版本,所以每个都有自己的 flann 库。

通常在两个库的 CMakeLists 中都有一行搜索 flann 库,例如:INCLUDE_LIBRARY($(flann) REQUIRED)

解决方案可能是删除两个已安装的库 pcl 和 openCv。然后从他们的网站下载并安装 flann。然后下载 openCv 和 pcl 的 nightly build,编译它们,它们应该都能找到相同的 flann 实例,这样问题就可以解决了

编辑: 还有一个想法,也许问题只是因为您在代码中使用了:

using namespace pcl;
using namespace cv;

所以你有 2 个来自 flann 命名空间的不同实例。删除“使用命名空间”并在你的代码中使用 pcl::thepclclass, cv::theopencvclass 看看这是否有帮助

祝你好运

【讨论】:

  • 嗯,运气不太好,上面已经用我尝试过的方法进行了编辑。
  • 我在 linux 上同时使用 pcl 和 openCv 在一个项目中没有问题。问题是它们都依赖于相同版本的 flann。我很确定如果您设法单独安装 flann,然后下载并编译 pcl 和 openCv 以依赖于已安装的 flann 版本,您可能会解决问题
  • opencv 和 pcl 使用的 flann 文件是否相同,或者它们是否经过调整以与 opencv 或 pcl 一起使用?在我使用#include 之前,他们一直在愉快地工作。
  • 据我所知,他们只是使用 flann 库而没有进行任何调整,但您可以在 pcl 列表中询问,因为 flann 的作者是那里的活跃成员
  • 我在带有 OpenCV 3.2 和 PCL 1.7 的 Ubuntu 14.04 上遇到了 OpenCV-PCL flann 冲突问题 - 省略了“使用命名空间 cv;”并在 cv:: 前面添加对我有用的地方。这个答案更简单:stackoverflow.com/a/15135264/975443
【解决方案3】:

解决方案就是在 flann 之前添加这样的双冒号 (::) 然后一切都会好起来的。

例如,它是:

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

成为:

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

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2019-12-25
    • 2012-08-05
    • 2018-01-02
    相关资源
    最近更新 更多