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/