编辑: kieth | 2019-07-04 |
一、OpenCV库基础知识 通常一个C/C++库(不局限于OpenCV库)由三部分组成:头文件、lib文件和dll文件.
头文件是编译程序时使用的,使用库的API就要包含相应的头文件. lib文件是链接程序时使用的.对于OpenCV 2来说,你使用了某个模块的API,就要链接对应的lib文件(通常一个OpenCV 2程序需要使用多个lib文件);
而对于OpenCV 3来说,对lib文件进行了整合,通常只需链接一个lib文件即可. dll文件是程序运行时需要的,如果程序一运行就报错,那很有可能是找不到相应的dll文件(未设置环境变量或dll版本不对). 针对Visual Studio的库的版本(主要指lib和dll文件,头文件通常是通用的)主要和以下三方面有关: Visual Studio(后面简称VS)的版本,不同的VS版本需要使用对应版本的库 项目使用的平台(x64或x86),即是64位应用程序(x64)还是32位应用程序(x86)(使用的平台在VS里面是可以选择的,如下图所示),不同平台需要用不同的lib和dll文件 项目配置(Debug或Release),相应的库版本通常也分为Debug版与Release版,该配置在VS里也是可以设置的(如下图所示),通常在开发调试阶段使用Debug(更方便调试,比如单步执行会严格按照代码顺序执行),项目完成后发布时使用Release(会对程序进行自动优化,提高运行效率),也就是说通常这两个版本的库我们都需要 官方下载的OpenCV库(Win pack)通常只提供针对特定版本VS和特定平台的库版本,例如OpenCV 3.4.2只提供针对VS2015和VS2017的x64平台的库版本(包含了Debug和Release两个版本).以下图像是OpenCV 3.4.2 Win pack下载解压后的截图: sources文件夹下是OpenCV库的源码,供自行编译使用的;
而编译好的库是在build文件夹下 build文件夹下,include文件夹下即为OpenCV库的头文件,是通用的;
x64文件夹下即为开发64位应用程序所需要的OpenCV库;
没有x86文件夹,说明未提供开发32位应用程序所需的库版本 x64文件夹下有vc14和vc15两个文件夹,分别对应VS2015和VS2017的库版本 vc14文件夹(vc15也类似)下有两个文件夹,bin中有库的dll文件,lib有库的lib文件,如下图所示: opencv_world342.dll和opencv_world342d.dll即为我们所要用到的dll文件,带d的为debug版,不带d的为release版,342表示OpenCV版本为3.4.2 opencv_world342.lib和opencv_world342d.lib即为我们所要用到的lib文件,带d的为debug版,不带d的为release版,342表示OpenCV版本为3.4.2 如果你要使用的库的版本官方未直接提供,比如对于OpenCV 3.4.2,你用的不是VS2015或VS2017,或是你想开发32位的应用程序,则需要自行编译OpenCV库从OpenCV 3开始,OpenCV库分为两个主要部分:第一部分是成熟的OpenCV API库,第二部分是近期加入的OpenCV算法库(contrib模块).官方下载的OpenCV库只包含第一部分的库,如果要使用一些更先进的算法,就需要下载额外的模块,并自行编译生成OpenCV库
二、自行编译生成OpenCV库 下面针对OpenCV 3.4.2,讲解一下用VS2015编译64位的带contrib模块的OpenCV库的详细过程,其他版本的库可参照此过程类似地完成,如果不需要使用contrib模块,则不执行相关操作即可. 准备相关软件和库 cmake 下载地址:https://cmake.org/download/ 下载cmake-3.12.1-win64-x64.zip(或其他相应版本,现在操作系统一般都是64位的,因此下载64位的版本的,如果是32位系统,则下载32位版本) 下载后解压即可 OpenCV 3.4.2 下载地址:https://opencv.org/releases.html 使用Windows则下载Win pack版本,内含有所需要的OpenCV源码 下载后运行exe进行安装(实际上为解压过程),将解压后的opencv文件夹改名,加上版本号(例如opencv3或opencv3.4.2),改名非必须,但改名后更方便知道对应的OpenCV库版本,此外如果装有多个OpenCV版本的话更容易进行区分 opencv_contrib模块(如果只使用OpenCV标准库则无需此模块) 下载地址:https://github.com/opencv/opencv_contrib/releases 注意下载的版本要与OpenCV版本对应 下载后解压,将modules文件夹重命名为contrib,然后将其拷贝到之前安装的OpenCV库的sources/modules文件夹下 运行cmake-gui.exe(在cmake解压目录bin文件夹下),对于Win10,需要右键以管理员身份运行,并指定相关路径: Where is the source code后的路径为OpenCV源码所在路径 Where to build the binaries后的路径为自行指定的编译OpenCV库所需的输出路径(编译OpenCV库所需的工程文件会输出到此路径下) 指定好路径后点击Configure按钮,选择VS版本(如果要生成64位的库,则选择带Win64版本,否则选择无Win 64的版本): 点击Finish按钮,即开始执行Configure过程(注意保持联网,期间可能会下载一些文件),完成后会有一些选项是红色的: 为了使用方便,让输出的lib和dll文件整合到一起(opencv_world342.lib/ opencv_world342.dll),我们勾上BUILD_opencv_world选项: 另外如果要编译Contrib模块,则为OPENCV选项下的OPENCV_EXTRA_MODULES_PATH指定Contrib模块源码路径: 然后再点击Configure. 如果完成后仍有红色选项,则继续点击Configure,直至没有红色选项为止: 然后点击Generate按钮,生成VS工程.