【问题标题】:OpenCV in cmake-based project: checking for contrib modules基于 cmake 的项目中的 OpenCV:检查贡献模块
【发布时间】:2015-11-23 20:55:03
【问题描述】:

我安装了 opencv 3.0(从源代码构建),并将它包含在我的基于 cmake 的项目中,并包含以下内容:

find_package(OpenCV 3.0 REQUIRED)

使用它一切正常,但我也想使用contrib 模块。我在构建 OpenCV 时指定了OPENCV_EXTRA_MODULES_PATH,并且我确定这些模块可用(我可以在我的项目中使用它们),但我想为 禁用此功能>OpenCV 没有 contrib 模块,即。 e.写这样的东西:

#ifdef HAVE_OPENCV_CONTRIB
// some tasty functionality
#else
// some replacement or dummies
#endif

有没有办法在我的 CMakeLists.txt 中确定它而不添加明确的定义? IE。我想在我的 CMakeLists.txt 中做这样的事情:

if (DEFINED ${OPENCV_BUILD_WITH_CONTRIB})
add_definitions(-DHAVE_OPENCV_CONTRIB)
endif(DEFINED ${OPENCV_BUILD_WITH_CONTRIB})

可能有一些简单的方法 - find_package(OpenCV) 之后的任何定义变量?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    现在我找到了唯一的方法来检查目标系统中的某些 contrib 模块头文件是否存在,即。 e.类似于以下内容:

    include(CheckIncludeFileCXX)
    check_include_file_cxx(opencv2/face/facerec.hpp HAVE_OPENCV_CONTRIB)
    if(HAVE_OPENCV_CONTRIB)
        add_definitions(-DHAVE_OPENCV_CONTRIB)
    endif(HAVE_OPENCV_CONTRIB)
    

    【讨论】:

      【解决方案2】:

      现在检查模块的规范方法是使用find_packageCOMPONENTS 选项:

      find_package(OpenCV 4 COMPONENTS bgsegm)
      if(OpenCV_bgsegm_FOUND)
        add_definitions("-DHAVE_BGSEGM")
      endif()
      

      这适用于 contrib 和非 contrib 模块。

      【讨论】:

      • 是的,opencv 4 和更新的 cmake 引入了该功能,现在它是首选方式。但回到 2015 年(或旧版本)它不起作用。
      猜你喜欢
      • 1970-01-01
      • 2016-03-15
      • 2016-12-10
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多