如何使用快速向下编译OpenCV

时间:2017-01-07 08:34:20

标签: python c++ opencv compilation cmake

我正在开展一项学术研究,实施新的搜索算法,基于Fast-Downward,一个实现多个Search Algorithms和许多搜索域和问题的c ++开源。还安装了Lab,一个管理编译和运行脚本的Python包。

最近我尝试将OpenCV库包含在其ML算法中,以便将这些算法集成到我的搜索算法中。

但是我在FD项目中包含一些lib时鼓励了一些问题,并且无法用FD编译OpenCV。

项目层次结构:

fast_downward
| -- benchmarks
| -- experiments
| -- lab
| -- misc
| -- src
|    | -- preprocess
|    | -- search
|    | -- translate
|    | -- VAL
|    | -- ML

ML目录是我想要编译的新子目录。

编译尝试:

src/CMakeLists.txt下的

include(ML/CMakeLists.txt)

add_subdirectory(ML)

但编译失败。

说实话,我从未尝试过编辑CMake文件,而且我也不了解策略以及如何做到这一点。

所以,我的问题是如何在我的主项目中集成OpenCV包/子文件夹(在我的项目中称为ML)?

修改

Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04

1 个答案:

答案 0 :(得分:2)

您不应该include(ML/CMakeLists.txt)add_subdirectory(ML)应该在src/CMakeLists.txt内。{ 现在,我们通常可以有两种情况:

  1. 您有一个系统范围的OpenCV安装(例如通过apt-get等),因此您使用的是OpenCV的系统版本
  2. 您在项目中包含OpenCV的来源。您构建它并使用此版本的OpenCV。
  3. 这两种情况需要以稍微不同的方式处理。

    系统范围的OpenCV安装

    我们假设OpenCV安装在系统的某个位置。然后在src/ML/CMakeLists.txt中,您应该有以下几行:

    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
    target_link_libraries(test ${OpenCV_LIBS})
    

    这是为了生成可执行文件,但是如果要生成库,则应该使用add_library(...)而不是add_executable(...)。如果您需要OpenCV中的特定组件,您应该使用find_package(OpenCV REQUIRED COMPONENTS core imgproc ...)来询问它,当然还可以参考OpenCV文档。请注意,您的CMake可能会在没有FindOpenCV.cmake脚本的情况下发货,因此您可能无法使用find_package(OpenCV)。在这种情况下,您需要从网上抓取一个。另请参考其来源,因为它可能会定义包含包含和库的不同变量,这意味着可能会使用target_link_libraries(test ${OpenCV_LIBS})而不是使用target_link_libraries(test ${OpenCV_LIBRARIES})

    您下载并包含在包

    内部/外部的OpenCV来源

    在这种情况下,我想你在系统的某个目录中有OpenCV包/源;在这种情况下你需要构建OpenCV,apt-get不会为你做的工作。在src/ML/CMakeLists.txt中,您将拥有类似

    的内容
    ExternalProject_Add(my_opencv
       CMAKE_ARGS -D BUILD_SHARED_LIBS=NO ...
       CMAKE_INSTALL_PREFIX=${MY_OPENCV_INSTALLATION_DIR} 
       SOURCE_DIR ${PATH_TO_OPENCV_SRCS} 
    )
    
    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
    target_link_libraries(test ${OpenCV_LIBS})
    

    值得咨询的来源是:
    OpenCV intro: cmake
    linking opencv libraries included as an external project via cmake
    Configuring an c++ OpenCV project with Cmake
    Could not find module FindOpenCV.cmake ( Error in configuration process)
    CMake and OpenCV 3.0
    sample FindOpenCV.cmake