从源码编译OpenCV3
OpenCV于2015年6月4号,在其官网上正式发布了最新的OpenCV version 3.0
版本,貌似有挺多的更新。由于我要用到contrib
模块的文本检测工具,所以打算重新编译一下。
首先,我们来到 OpenCV 在 Github 上的主页,就可以看到 http://githu.com/Itseez 下有 opencv(主项目),opencv_extra(额外的数据),opencv_contrib(非正式发行的模块),copencv_3rdparty(用到的第三方库),等等子项目。我要用到的 text detection 算法就在 contrib 里面。
直接用终端下的Git命令下载下来这两个 repository
- 1
- 2
- 1
- 2
下载完以后,当前文件夹就会多了 opencv 和 opencv_contri 两个文件夹,和 Github 上一毛一样的。
接着我们要新建一个文件夹,叫 release 好了,我们要在这个文件夹下编译和安装 OpenCV,Linux下命令如下:
- 1
- 1
然后,我们要用 cmake 这个工具来编译整个项目的源文件,放心,makefile 什么的已经都给配置好了,我们只需要运行 cmake 命令,加一些我们要的参数就好了。
cmake 有一个参数为 -D,后可以跟变量名和赋的值,如 cmake -D CMAKE_BUILD_TYPE=RELEASE 表示我们要编译 release 版本。这里由于我要额外编译 contrib 模块,所以要告诉 cmake。最终这些东西会写进去CMakeCache.txt中。命令如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
知道了要编译哪些东西,和编译的配置,我们就可以执行编译和安装了,运行下面两个命令,就开始慢慢等吧,我这里不到十分钟就好了,挺快的!编译会输出一堆红红绿绿的信息和进度等,编译完注意看最后的几行,有没有提示你出错。第二条命令要root权限,因为我们要把一些文件拷贝进系统文件夹下面。
- 1
- 2
- 1
- 2
小试牛刀
我们下来看看,编译完以后,会有什么变化。运行下面的命令:
- 1
- 1
于是会输出一堆的 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_text 等,这些都是我们可引用的 OpenCV 静态库路径,熟悉 g++ 的同学知道这里的不同参数之间的区别。有兴趣的可以去深究。
我们来尝试编译一个opencv文件,如 ./opencv/samples/cpp/tutorial_code/introduction/display_image 下的 display_image.cpp 文件,源代码列出来吧:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
用下面的命令来编译:
- 1
- 1
注意最右边的符号 ` 不是引号,而是键盘上 1 左边的那个。这是 shell 的语法,我就不多说了。
编译没有报错的话,就可以运行试试看了
- 1
- 1
然后你的 fish.jpg 图片就会显示在窗口中。
Python-OpenCV
当然,有时候,我们想用 OpenCV 的 Python 接口,那样子开发更方便。在 ./opencv/samples/python2/ 文件夹下面,有很多的例子,没事可以跑着玩玩。比如说:
- 1
- 1
就可以运行一个叫做光流算法
的程序,听说可以检测运动的物体,我也不懂是干啥,但是觉得 Demo 好炫,好厉害有木有! OpenCV 真是太强大了。
平常我们学习的时候,可以多看看这些例子,非常有助于我们学习代码。官网的 tutorials + API Reference ,加上这些例子,不比读一本教程书来的简单。实际上,我更喜欢前者。
Python 有很好的文档机制,用 help 函数,直接在 terminal 里,就可以输出文档。 help的参数可以是函数名,也可以是变量。