Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用快速向下编译OpenCV 我正在研究一个学术研究,基于一个C++开源实现新的搜索算法,它实现了多个搜索域和问题。还安装了一个Python包,用于管理编译和运行脚本_Python_C++_Opencv_Compilation_Cmake - Fatal编程技术网

如何使用快速向下编译OpenCV 我正在研究一个学术研究,基于一个C++开源实现新的搜索算法,它实现了多个搜索域和问题。还安装了一个Python包,用于管理编译和运行脚本

如何使用快速向下编译OpenCV 我正在研究一个学术研究,基于一个C++开源实现新的搜索算法,它实现了多个搜索域和问题。还安装了一个Python包,用于管理编译和运行脚本,python,c++,opencv,compilation,cmake,Python,C++,Opencv,Compilation,Cmake,最近,我尝试为它的ML算法包含库,以便将这些算法集成到我的搜索算法中 但当我在FD项目中包含一些LIB时,我鼓励了一些问题,并且不能用FD编译OpenCV 项目层次结构: fast_downward | -- benchmarks | -- experiments | -- lab | -- misc | -- src | | -- preprocess | | -- search | | -- translate | | -- VAL | | -- ML ML目

最近,我尝试为它的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

您不需要
include(ML/CMakeLists.txt)
add_子目录(ML)
src/CMakeLists.txt中应该足够了

现在,我们通常可以有两种情况:

  • 您在系统范围内安装了OpenCV(例如,通过apt get等),因此您使用的是OpenCV的系统版本
  • 您可以在项目中包含OpenCV的源代码。您构建它并使用此版本的OpenCV
  • 这两个案件需要以略有不同的方式处理

    系统范围的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\u library(…)
    而不是
    add\u executable(…)
    。如果您需要OpenCV中的特定组件,您应该使用
    find_包(OpenCV所需组件核心imgproc…
    来获取它,当然也可以查阅OpenCV文档。请注意,您的CMake可能没有
    FindOpenCV.CMake
    脚本,因此您可能无法使用
    find\u包(OpenCV)
    。在这种情况下,您需要从web上获取一个。还可以参考它的源代码,因为它可能定义包含和库的不同变量,这意味着可能会发生这样的情况,即不使用例如
    target\u link\u库(test${OpenCV\u LIBS})
    而应该使用
    target\u link\u库(test${OpenCV\u 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源代码。正如我从你们那里了解到的,答案是,如果我想一起编译,并且能够从我的项目中的另一个源文件调用OpenCV的类,我需要做的就是把你们的示例cmake代码放在OpenCV的CMakeLists.txt文件中?当我编译整个项目时,我会一起编译吗?不,第二种情况下,CMakeLists.txt中的“示例”行不应该放在OpenCV的CMakeLists.txt中,而是放在你的CMakeLists.txt中。基本上,您是在CMakeLists.txt中告诉生成可执行文件或库:“构建OpenCV(这里的细节和不同的情况…),找到OpenCV,使用OpenCV的头文件和库创建我的可执行文件或库”。