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
- OpenCV 3 - 编译更强大的OpenCV(一) - 准备
- OpenCV 3 - 编译更强大的OpenCV(二) - 拼人品时刻
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞(续1s)一点小补充
- openCV前期准备(一)
- openCV前期准备(二)
- Opencv 的交叉编译
- openCV编译的坑
- OpenCV的源代码编译
- OpenCV学习笔记(三十九)——再谈OpenCV的数据结构,Mat是如此强大
- OpenCV学习笔记(三十九)——再谈OpenCV的数据结构,Mat是如此强大
- Qt5.3 OpenCV 环境搭建(编译OpenCV)
- 【OP001】opencv强大的视频图形图像处理
- 【opencv】opencv编译生成sln的方法
- OpenCV学习笔记(一) OpenCV的概…
- 一、OpenCV的安装
- Opencv的准备阶段小知识
- opencv安装之前的准备知识
- 164. Maximum Gap
- iOS 关于网络数据解析小数位精度丢失问题的修正
- WPF下采用C#实现FTP上传下载获取文件列表
- 在java窗口程序中添加背景图片
- 目标跟踪系列二:Staple: Complementary Learners for Real-Time Tracking(2016CVPR)
- OpenCV 3 - 编译更强大的OpenCV(一) - 准备
- Docker三大核心之仓库
- Java中创建对象的5种不同方法
- 解决在火狐浏览器多1px的问题
- tcp socket状态
- Caused by: java.lang.IllegalStateException: Ambiguous mapping found
- Windows SDK应用程序窗口标题栏上显示自定义图标
- 【OI做题记录】【BZOJ】【BeiJing wc2012】冻结
- 小议极简代码