OpenCV多平台编译指南

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

详细的安装指令可以参考:
//www.greatytc.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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容