美文网首页
OpenCV多平台编译指南

OpenCV多平台编译指南

作者: suressss | 来源:发表于2016-11-28 22:44 被阅读0次

    OpenCV

    OpenCV在图像处理相关的应用中被广泛的应用,无论是在Windows,OSX或者是在移动端都有着良好的支持,并且有着很好的开源社区。
    不过大家在集成一些开源库时,扑面而来的往往是一堆Linkerror或者runtime error,最终搭建环境先浪费几天时间,把热情都消耗殆尽...
    本篇文章就主要讲讲多个平台下的OpenCV环境搭建,这个是个比较简单的东西,希望能够以简单的方式展现出来,让更多的人能够快速的上手OpenCV

    我们搭建的究竟是什么环境?

    大家经常会说,搭建什么什么环境花了一天,这里的环境一般包含了编译环境以及运行环境:
    程序的编译包含了编译以及链接两个过程:
    编译环境就是指告诉编译器,这个工程的头文件在哪里找,也就是声明在哪里;告诉链接器,lib在哪里,也就是说声明对应的实现在哪里;
    编译成功不代表可以正常运行,在使用动态库时,需要配置对应的运行环境,要设置好环境变量,例如在windows下告诉程序运行时dll在哪里。

    OpenCV in IDE

    为什么不写在Windows下呢,因为对于图形化的IDE来说,操作系统是什么并不重要,要理解我们配置的环境究竟是什么,所以我们在配置工程环境时:

    1.编译环境
    头文件路径:在VS下从项目->VC++目录设置include,Xcode下既在header search path下设置
    lib路径:VS:项目属性->VC++目录设置lib,Xcode:library search path
    2.链接环境
    VS:项目属性->链接器->输入->附加依赖项:lib文件名:(这里需要注意的是要选与VS版本对应的库,否则也可能运行失败)
    Xcode:add files to ...
    3.运行环境:
    设置bin目录,也就是提供运行时程序所需要的环境

    OpenCV in OSX

    OpenCV在OSX下的安装比较简单,通过brew指令可以方便的部署,这里需要注意的是要确定安装的版本,下面会详细说道
    先简单列出需要安装的依赖项:

    1.brew
    2.cmake
    3.python

    详细的安装指令可以参考:
    http://www.jianshu.com/p/3d149f167b41
    关于版本的问题,3.X与2.X在目录结构上有些变化,多了一些videoio之类的库,因此对于项目依赖是3.X的要格外注意了
    具体的安装指令应当是:

    brew install --HEAD opencv3
    目的是为了取得最新的版本:
    安装完成后的位置:均在Celler下:
    例如我安装好后的路径:
    /usr/local/Cellar/opencv3/HEAD-e04eb8c_4/
    /usr/local/Cellar/opencv/2.4.13.1/
    以上为一个2.x一个3.x
    上篇文章中的设置pkg的目的主要是方便编写makefile,我更倾向于使用cmake:
    opencv的sample里给出了一个cmakelist的example:

    # cmake needs this line
    # Define project name
    project(opencv_example_project)
    # Find OpenCV, you may need to set OpenCV_DIR variable
    # to the absolute path to the directory containing OpenCVConfig.cmake file
    # via the command line or GUI
    find_package(OpenCV REQUIRED)
    
    # If the package has been found, several variables will
    # be set, you can find the full list with descriptions
    # in the OpenCVConfig.cmake file.
    # Print some message showing some of them
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    
    if(CMAKE_VERSION VERSION_LESS "2.8.11")
      # Add OpenCV headers location to your include paths
      include_directories(${OpenCV_INCLUDE_DIRS})
    endif()
    
    # Declare the executable target built from your sources
    add_executable(opencv_example grabcut.cpp)
    
    # Link your application with OpenCV libraries
    target_link_libraries(opencv_example ${OpenCV_LIBS})
    

    这个里面最重要的是 find_package(OpenCV REQUIRED);find_package()这个指令主要是通过寻找对应的config.cmake进行配置,如果出现找不到对应的依赖也不要慌,先找到opencv的安装路径,例如我安装在:
    /usr/local/Cellar/opencv/2.4.13.1/
    那么我可以在:
    usr/local/Cellar/opencv/2.4.13.1/share/OpenCV/
    下找到对应的cmake文件,这个时候可以执行:
    cmake -DCMAKE_PREFIX_PATH=usr/local/Cellar/opencv/2.4.13.1/share/OpenCV/..
    通过手动设置CMAKE_PREFIX_PATH来告诉cmake从哪里找到对应的OpenCV头文件以及依赖,
    在编写好cmake脚本后可以很容易生成Xcode proj等

    OpenCV的sample文件夹里提供了多种语言的example,有很多基本算法的实现,通过这些例子可以很好的熟悉到OpenCV的基本用法,以sample/cpp/grabcut.cpp为例:
    将上小节提供的cmake脚本与grabcut.cpp放入一个文件夹下,执行

    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Debug ..
    make
    

    便可得到可执行文件。

    X

    突然发现我在几年前也写过类似的环境配置,不过当时可能踩的坑比较少,参照着别人的方法就一步一步搞定了,不过在实践中,总有一些奇葩的错误,所以要了解环境背后的原理是什么非常重要,可以少走很多弯路,少浪费些时间。
    最后其实OpenCV的文档一直都有很好的维护,基本上涵盖了所有的坑,所以想要深入的学习的话,看这些文档是必不可少的http://docs.opencv.org/

    相关文章

      网友评论

          本文标题:OpenCV多平台编译指南

          本文链接:https://www.haomeiwen.com/subject/xvvnpttx.html