【问题标题】:Incompatible openCV and libtiff libs on OSXOSX 上不兼容的 openCV 和 libtiff 库
【发布时间】:2015-04-26 13:12:11
【问题描述】:

我正在处理一个金字塔形的 tiff 文件。但是,OpenCV 不支持金字塔 tiff 文件,因此我尝试使用 libtiff 4.0.3 提取我需要的图层/目录/分辨率,然后将其传递给 OpenCV 进行处理。

我包括如下:

#include "tiffio.h"
#include "opencv2/highgui/highgui.hpp"

但是这样做会给我在types_c.h 中的以下内容:

typedef int64_t int64;
Typedef redefinition with different types ('int64_t(aka 'long long') vs 'long')

似乎 int64_t 被 2 个库中的每一个定义不同。

我已经使用homebrew 安装了这两个库,因此我不想编辑这些库,因为这会导致获取更新的问题,对我团队中的未来开发人员来说是一种痛苦等。

有没有一种方法可以在不修改它们的情况下使用这两个库?

【问题讨论】:

    标签: c++ macos opencv homebrew libtiff


    【解决方案1】:

    由于这两个库都“污染”了具有定义的全局命名空间(您知道,在第三方库中拥有适当的命名空间是多么重要),因此无法将两者都包含到全局命名空间中。您已将其中一个包含在用户定义的命名空间中,如下所示:

    namespace libtiff {
        #include "tiffio.h"
    }
    #include "opencv2/highgui/highgui.hpp"
    

    这将解决编译问题,虽然我不确定这个解决方案是否方便使用,因为您必须使用 libtif:: 前缀来使用 libtiff 成员,

    【讨论】:

    • 我不知道你可以像这样包含命名空间,这正是我想要的。 libtif:: 前缀不是很好,但它比替代品要好得多,这是一个很小的代价。谢谢!
    • 我认为你可以将using namespace libtiff;放在includes之后,除非你在任何后续代码中使用int64类型,否则不会有任何冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多