有段时间没折腾OpenCV了,刚下载了最新版本,准备配置开发环境。但每次配置前都要去网上搜一下,心想要配置些什么呢?我想,如果一些东西总是忘记,就是还没完全理解它,今天就再梳理一下。

《Learning OpenCV》(第3版)有一节:Installation,就引用它里面的一句话开始吧:

现在,OpenCV使用Git作为开发的版本控制系统,使用CMake去编译。你可以在官网下载到一个exe文件,其实就是一个压缩包。

1. 解压

解压后,得到了什么呢:

3个txt文件,是许可和说明文件,可以稍微了解一下。2个文件夹,sources中是源码,build中是prebuilt OpenCV binaries。这里,我们比较一下,最新的4.1.1和比较老的3.0.0的build有哪些不同

4.1.1解压:

opencv3比opencv2多了哪些_动态库

3.0.0解压:

 

opencv3比opencv2多了哪些_动态库_02


 

可以看到,4.1.1版本只有一个x64,而3.0.0版本有x64、x86两个文件夹。这是我们有时候不得不编译OpenCV的一个原因,比如你想用4.1.1的x86版本。另外,如果你想修改OpenCV的源码,也需要自己编译,这样就可以有Debug库,并可以单步调试进OpenCV的源码。

再来看一下4.1.1的x64和3.0.0的x64

4.1.1 x64:

opencv3比opencv2多了哪些_opencv3比opencv2多了哪些_03

3.0.0 x64:

 

opencv3比opencv2多了哪些_opencv3比opencv2多了哪些_04


这里VC指Microsoft Visual C++,微软的C/C++集成开发环境,又称Visual C++、MSVC、VC++,VC可以看做Microsoft Visual Studio的一个子集,有相应的版本对应关系

然后再进入vc文件夹,看看4.1.1的vc15和3.0.0的vc12

4.1.1 v15

opencv3比opencv2多了哪些_OpenCV_05

3.0.0 v12

 

opencv3比opencv2多了哪些_动态库_06


3.0.0的时候,OpenCV预编译库还提供静态库,而4.1.1版本的预编译库只支持调用动态链接库了。

2. 编译静态库和动态库

下面就分别来编译静态库和动态库。网上编译opencv的教程很多,我这里就不赘述了,放2张图:

opencv3比opencv2多了哪些_静态库_07

opencv3比opencv2多了哪些_opencv3比opencv2多了哪些_08

重点记录3点:

1、取消JAVA和PYTHON相关的勾选(我只需要C++库)
2、不勾选BUILD_SHARED_LIBS编译静态库
3、勾选BUILD_SHARED_LIBS编译动态库

关于2、3我的具体操作是,先不勾选BUILD_SHARED_LIBS,编译出静态库,然后勾选并重新Generate,再编译动态库。

3. Link OpenCV statically 还是 use OpenCV dynamic link libraries(DLLs)

使用opencv库的配置方法网上也很多。我疑惑的一点是,比如配“包含目录”,是在VC++ Directories的General里面配,还是在C/C++的General里面配,查了一下,好像区别不大,大家可以参考这篇文章

opencv3比opencv2多了哪些_opencv3比opencv2多了哪些_09

 

到此,不知道你对“安装OpenCV”还有什么疑惑吗?

有些OpenCV书上讲“安装OpenCV”,就是解压并配置环境变量,但对于开发者来说,其实并不需要配置环境变量(或者说不推荐这种配置开发环境的方式)。如果你是静态链接OpenCV,静态库会被打包进你的应用程序,如果你是使用OpenCV动态库,DLLs会随你的应用程序一起发布。

也有,比如《OpenCV计算机视觉编程攻略》这本书里,安装就是指编译,是否需要编译我们上面说了,取决于你的需求。