OpenCV 3 - 编译更强大的OpenCV(一) - 准备

来源:互联网 发布:vimeo视频下载软件 编辑:程序博客网 时间:2024/05/16 14:04

这几篇文章将带你编译出一个较为完整的OpenCV库,后续还会带你集成如Eigen、CUDA等模块。
期间本人遇到国内网络导致的错误、CMakeLists的BUG、甚至编译工具的BUG。
我们先从最不容易出错地方的开始。

你需要知道

OpenCV虽然会在的提供安装程序中给你一个事先编译好的二进制代码(库),但是这基本上就是一个残血版的OpenCV,所以我们需要对它重新编译来加入一些新的特性,尝试添加令人exciting的contrib模块和TBB支持。

何为CMake

CMake是一个自动化搭建Build流程的系统,通过发布者预先编辑好针对CMake的配置文件,开发者可以通过CMake便捷地来调整需要Build的内容。CMake会在配置过程中自动按需调整源码依赖关系等细节。
CMake的配置文件取名为CMakeLists.txt,OpenCV的源代码路径下有一个看起来很复杂的CMakeLists.txt。CMake解析这个文件后可以让你直观地配置OpenCV包含哪些模块,集成哪些库(比如附加的contrib模块、Eigen、CUDA、TBB等),启用什么技术特性(AVX、AVX2、SSSE3等)等等,同时也能较为方便地添加这些组件的文件路径,之后由CMake生成一个用于编译的工程文件,比如我使用VS2015,那CMake就生成一个VS的工程文件,打开后即可编译出想要的东西。

何为TBB

Threading Building Blocks (TBB) is a C++ template library developed by Intel for parallel programming on multi-core processors. Using TBB, a computation is broken down into tasks that can run in parallel. The library manages and schedules threads to execute these tasks.

维基百科上的解释是:TBB是Intel大哥开发的一个针对多核多线程处理的C++模板库。
个人对它的认知是:我们用它可以较为简洁地实现一些常用的并行流程,比如parallel_for这个函数,扔进去你的函数入口,便可以用来实现多线程的for逻辑。当然你要使用它的前提在于你能够用TBB让你的程序更高效。
即使你不会使用TBB,我还是很建议你在编译的时候将TBB集成在OpenCV中。因为OpenCV的许多代码也用到了TBB,只不过默认执行的时单线程的串行代码。当你选中WITH_TBB时,CMake会修改cvconfig.h文件,在里面添加一行#define HAVE_TBB,这样便能在一些模块中切换至TBB版的代码使用并行处理来提高速度。

OpenCV的contrib模块

简言之就是一些技术比较新,但是还不是很适合(性能、稳定性、甚至版权等因素)默认集成在OpenCV中的功能,比如TLD模块。
这里写图片描述

有言在先

OpenCV编译时间比你的普通工程要长得多,不加CUDA一般不超过20分钟,加了CUDA则将近2小时,每个细节或问题都要仔细检查,不要抱着侥幸心理去执行一个不确定问题所在的build,人生苦短,何必碰运气。
CMake配置时会下载依赖的软件包(如IPP、ffmpeg等),请保证有一个能够稳定访问GitHub raw的网络,如果网络有问题则会下载失败。这个问题可以解决,我会在下面给出解决办法。
为了添加新的特性,不建议将新内容直接追加(覆盖)到原有的库中。一个是一旦编译出问题你整个库就乱了,不如重来;另一个是我对源码和CMakeLists没有达到深度理解的程度,不保证这样稳定或者能用。


下载必要组件

OpenCV源码

本次编译的版本是OpenCV3.1.0,为了获取最新发布的稳定版本,我们直接访问:
https://github.com/opencv/opencv/releases
(PS 3.2.0已经从rc变成release了,编译3.2.0可以完全按着下面几章的走,由于没有bug,所以不用理会走坑所需要做的东西,按部就班添加、按部就班编译、完成,enjoy)
这里写图片描述
建议添加到书签,如果将来要编译其它(或更新的)版本也可以在此找到。
下载Source code (zip)并解压到一个不带中文路径的地方。
由于本人C盘是SSD,为了直观和效率,我直接在根目录新建了一个名为opencv310的文件夹,并把压缩包内的文件夹解压在C:\opencv310\source\opencv\中。

OpenCV_contrib源码

本次编译的版本是OpenCV3.1.0,为了获取配套的稳定版本,我们直接访问:
https://github.com/opencv/opencv_contrib/releases
这里写图片描述
下载同为3.1.0版本的源码,同样将zip压缩包里的文件夹扔进C:\opencv310\source\opencv\中。

TBB库

官网https://www.threadingbuildingblocks.org/,但是这个无害的网站被我国禁止访问了(靠)。
我们打开官网后点击右上角download now按钮中All Operating Systems & Previous Releases »字样,选择操作系统即可下载库的压缩包。
这里写图片描述
我下载的文件名称是tbb2017_20161004oss_win.zip,更新的版本也可以使用,但一定不要直接下载源码并把目录扔给CMake,我们要下载的是针对操作系统编译好的二进制库。
同样把压缩包中的文件夹扔进C:\opencv310\source`中。

CMake程序

官方下载https://cmake.org/download/,我选择的是发此文时最新的3.7.0的x64安装包cmake-3.7.0-win64-x64.msi,一路下一步,为了方便,别忘了勾选创建桌面快捷方式。

这里写图片描述

下一节我将示范如何一步一步配置并编译出我们需要的OpenCV

0 0
原创粉丝点击