![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_94ed5e46-4c3a-11ec-94e8-fa163eb4f6be.png)
第 24 篇 | LINSHIYI ![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_94fcad4c-4c3a-11ec-94e8-fa163eb4f6be.png)
刚入职没多久的时候,为了测试一个软件,我在Windows系统下配置过OpenCV2和OpenCV3的环境,后来写小程序的时候又有机会在Ubuntu系统下配置了几次。当时留存了一些截图,不过大都比较杂乱,最近好好整理了一下这部分的内容,希望能把这些东西讲清楚![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_955377d0-4c3a-11ec-94e8-fa163eb4f6be.png)
这个系列叫做“OpenCV配置攻略”,目前已经有了4篇文(原本只想写一篇的
)前两篇以概念和文件解析为主,后两篇是OpenCV在Windows和Ubuntu下的配置教程。
这是本系列的第一篇,主要介绍OpenCV、Visual C++(VC++)和Visual Studio(VS)概念,并给出OpenCV和VS的安装教程。第二篇会解析OpenCV安装包中的内容,这里只针对Windows系统和Ubuntu系统。
第三篇和第四篇是OpenCV在Windows10和Ubuntu16.04系统下的安装和配置攻略,我在文中分别用OpenCV2.x,3.x和4.x的配置过程作为例子,还列出了我曾遇到的bug以及解决方法,所有内容都有截图,可以放心食用
先来介绍OpenCV的概念,这是一款开源的,跨平台的,计算机视觉和机器学习软件库,它提供了非常多的计算机视觉算法,在Linux、Windows、Android和MacOS操作系统上都可以被调用,官网(https://opencv.org/)这样定义OpenCV:
OpenCV (Open Source Computer Vision Library) is an open-source BSD-licensed library that includes several hundreds of computer vision algorithms.
OpenCV1.0是由C语言编写的,从2.0开始,C++成为了主要的库语言,C语言的接口也从OpenCV2.4开始被弃用。目前OpenCV的主要接口是C++,它还提供Python、Java等语言的API供开发者调用。
贴一个OpenCV-Python的中文文档网址方便以后查找:http://www.woshicver.com/
由于OpenCV的主要接口是C++,所以在日常工作中使用C++做OpenCV开发的人员会更多一些。而想要在计算机上运行C++程序,就要满足C++预处理、编译、汇编、链接、运行所需要的环境,即满足C++开发环境。
我们在开发任何语言的时候都要满足该语言的开发环境,能提供这种环境的工具就叫做IDE,即集成开发环境(Intergrated Development Environment)。IDE简单来说就是一款应用程序,它包括了代码编辑器、编译器、调试器等工具,让我们在一个应用程序中就可以完成代码编写、运行、调试等一系列开发流程,非常地方便。
我们常用的IDE包括PyCharm(Python IDE)、Eclipse(常被当作Java IDE使用),还有1.3节会提到的Visual Studio等等。
在Windows系统下,比较经典的C++ IDE是VC++,全称Microsoft Visual C++,也有人称为Visual C++或者VC。我记得大一的时候我们写作业用的就是Visual C++6.0,至今还记得那个图标:
其实VC++6.0已经是非常久远的IDE了(微软公司在1998年推出),近些年微软也陆续推出了VC++11.0、VC++12.0等新版本的IDE,与此同时,OpenCV也在不断更新着版本。不同版本OpenCV的库文件由不同版本的VC++编译而成,也就是说,不同版本的OpenCV支持不同的VC++环境,我们在开发的时候必须要注意这个问题。
我在OpenCV官网上挨个查看了OpenCV和VC++(安装包里简称为vc)版本之间的对应情况,太老的版本官网上已经找不到了,能找到的都在下图:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_95ef7432-4c3a-11ec-94e8-fa163eb4f6be.png)
以Windows安装包为例,我们在下载完安装包后,build->x64(或者x86)文件夹下会有相应的vc文件夹,对应着不同版本VC++编译器编译好的库文件:
从上图可以看到,OpenCV2.4.10提供了由VC++10,VC++11和VC++12编译的库文件,OpenCV3.4.10提供了用VC++14 和VC++15编译好的库文件。我们想使用哪个VC++版本生成的文件,就要提供相应的VC++环境。那么如何提供呢?最简单的答案
下载一个Visual Studio。
Microsoft Visual Studio也被简称为Visual Studio或者VS,它是一款功能更加强大的IDE,支持多平台、多语言的开发。来看一看官网列出的VS支持的开发内容(https://visualstudio.microsoft.com/zh-hans/vs/):
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_96955a82-4c3a-11ec-94e8-fa163eb4f6be.png)
相比于单独的VC++IDE,Visual Studio的优势不仅在于多语言和多平台开发,还在于它可以实现版本控制、团队协作、一键部署等功能,使用起来更加方便。
目前VC++已经被集成在了VS中,成为了Visual Studio中的一个组件,我们可以在Visual Studio中轻松实现C++的开发,对于VC++和VS的关系,微软官网这样解释:(https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/hh967574(v=vs.120))
As part of the Visual Studio Integrated Development Environment (IDE), Visual C++ shares many windows and tools in common with other languages.简单来说,Visual Studio中包含了许多语言的开发工具,Visual C++是其中一种,它们之间的关系有点像Microsoft Office和Microsoft Word。不同版本Visual Studio默认安装的VC++编译器版本不同,先来看一张图:(https://docs.microsoft.com/zh-cn/cpp/preprocessor/predefined-macros?view=msvc-160)Visual Studio和VC++版本对应情况(部分)
这是微软官方文档给出的Visual Studio版本和它默认安装的VC++编译器版本对应表(上表只是一部分)。编译器版本有主版本号和次版本号,小数点前的是主版本号,小数点后的是次版本号,次版本号会随着VC++一些小的更新而变化,不过我们一般只关注主版本号就可以了。根据前三节的内容,我们可以发现,不同版本的OpenCV安装包中包含了不同版本VC++编译好的库文件,不同版本Visual Studio中默认安装了不同版本的VC++编译器,如果想要让程序成功运行,就要让二者的VC++版本保持一致。拿我们之前提到的OpenCV3.4.10举例,Windows系统的安装包下有vc14和vc15两个文件夹,说明我们可以使用VC++14或者VC++15来编译库文件,VS2015中默认安装VC++14,VS2017默认安装VC++15,所以我们可以选择VS2015或者VS2017作为IDE来进行开发。![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_971d79a8-4c3a-11ec-94e8-fa163eb4f6be.png)
在满足VC++版本对应的情况下,选择哪一个版本的IDE或VC++编译器,是个人喜好问题,没有严格要求。当然,我们不想下载其他版本Visual Studio的话,也可以直接在现有的VS中安装想要的Visual C++编译器,有兴趣的同学可以看看这个链接(https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0)
还有一点,虽说VS2019默认安装VC++16编译器,但是目前最新版的OpenCV4.5.3只有vc14和vc15两个文件夹,我们在配置的时候选用最新版本(vc15)的库文件就可以。除了VC++版本的对应,我们还要注意VC++编译器位数(32位或64位)的对应。有关32位/64位的区别就不展开说了,这里只解释一个名词:向上兼容,即32位编译器编译出的程序在32位或64位操作系统上都可以运行,而64位编译器编译出的程序只能在64位操作系统上运行。使用不同位数编译器编译出来的C++程序会具有和编译器相同的位数,而选择哪种位数的编译器需要看我们自己的偏好或者项目需求,这里没有强制的要求。编译器位数在OpenCV安装包中的体现是名为“x64”和“x86”的文件夹,“x64”代表64位编译器编译的文件,“x86”代表32位编译器编译的文件。我们拿OpenCV2.4.10安装包举例:在OpenCV2.x版本中会有x64和x86两个文件夹,到了3.x和4.x版本基本就只有x64文件夹了,比如上一节刚提到的OpenCV3.4.10:
这里再结合一下1.4中的内容,在x64/x86文件夹下是vc系列的文件夹,比如刚刚的提到过的OpenCV3.4.10,进入x64文件夹下,会看到v14和v15两个文件夹:总结来说,OpenCV3.4.10安装包中x64->vc14文件夹下的内容代表了64位的,VC++14,编译出的库文件,OpenCV2.4.10安装包中x86->vc12文件夹下的内容代表了32位的,VC++12,编译出的库文件,其他同理。在Visual Studio中,编译器的位数体现在配置管理器中,我们可以给自己的项目选择需要的编译器位数,下面是VS2019的配置管理器窗口,可以看到有x64和x86两个选择,说明VC2019默认安装的VC++16有64位和32位两种选择:
而在VS2012中,默认编译器VC++11只有x86一个选择,这里的win32=x86,都代表32位。
所以,这又是一个双向奔赴的问题
我们安装的OpenCV安装包下会有使用不同位数VC++编译器编译好的库文件,而Visual Studio中默认的编译器也会有不同的位数,只有VC++编译器位数对应,我们才能成功编译程序。具体使用哪一种位数的编译器,需要看开发出的程序未来希望在哪一种位数的操作系统下运行,也就是,看个人喜好or项目要求。如果想要安装不同位数的编译器,可以参考我在1.4节最后贴出的链接。最后贴一张图,总结一下1.4和1.5中说到的版本对应问题:
上图以OpenCV3.4.10为例,绿色的线路是畅通的,我们使用了OpenCV安装包中->使用64位,VC++15编译器->编译成的文件,使用VS2017->选择64位,VC++15编译器->开发程序。这样开发出来的程序是64位的,可以在64位操作系统上运行。OpenCV3.4.10没有提供用32位编译器编译成的文件,所以我们不能使用VS2017中的x86编译器来编译x64文件夹中的内容。如果想要使用的话,需要自己用OpenCV源代码->使用32位VC++14/15编译器->编译需要的库文件。如果我们想用vc14文件夹下的内容,可以安装VS2015->使用x64位,VC++14编译器开发程序。如果不想安装VS2015的话,可以在VS2017下安装VC++14编译器,具体可以见1.4节最后的链接。另外,使用蓝色方法的话需要注意一个问题,VS和VC++编译器的版本可能出现不兼容的问题,有可能安装好了VC++新版本也无法运行。![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_987ef510-4c3a-11ec-94e8-fa163eb4f6be.png)
OpenCV的下载和安装都比较简单,先放一张官网首页(http://opencv.org)的图片:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_98a11802-4c3a-11ec-94e8-fa163eb4f6be.png)
从官网首页我们可以很方便地访问到OpenCV的下载页面、GitHub主页、使用教程、问题讨论社区等页面,内容非常全,而且官网还提供了非常多的示例和文档供读者选择。点击首页Library下的Releases选项,就能跳转到OpenCV各个版本的下载页面了:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_98f300fe-4c3a-11ec-94e8-fa163eb4f6be.png)
我们可以根据不同的系统和版本需要下载OpenCV安装包,点击“Windows”选项下载下来的是.exe格式的压缩包,点击“Sources”、“iOS pack”和“Android”选项下载下来的都是.zip格式的压缩包:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_992d1a96-4c3a-11ec-94e8-fa163eb4f6be.png)
下载完成之后直接解压缩就可以得到一个名为“opencv”的文件夹了,如果像我一样下载了多个版本的OpenCV,可以在设定解压路径的时候多加一个文件夹防止文件名称混淆:从官网下载安装包的时候时间会有些长,需要耐心等待一下。![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_99de7b7e-4c3a-11ec-94e8-fa163eb4f6be.png)
https://docs.microsoft.com/en-us/visualstudio/install/install-visual-studio?view=vs-2019
目前Visual Studio的最新版本是VS2019,打开官网首页(https://visualstudio.microsoft.com/zh-hans/),点击链接下载即可:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_99fa4ebc-4c3a-11ec-94e8-fa163eb4f6be.png)
Windows下一共有3种类型可以选择:免费社区版(Community),收费的专业版(Professional)和企业版(Enterprise),个人使用的话下载社区版就足够了:点击下载后会跳转到下载页面,耐心等待一会儿就会自动下载VS2019的安装包了。这里有一个bug,当我们跳转到下载页面之后,如果点击“单击此处以重试”的话,会自动下载VS2017社区版
,估计是工作人员更新了版本但忘记更新链接了:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9ac70542-4c3a-11ec-94e8-fa163eb4f6be.png)
如果想要下载旧版本的Visual Studio,可以在这个链接中选择需要的版本(https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/),目前我们可以下载VS2017、VS2015、VS2013和VS2012版本:
这里还有另一个需要注意的地方
就是在跳转的时候尽量使用Google浏览器,使用其他浏览器的话容易跳转失败:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9b3c868c-4c3a-11ec-94e8-fa163eb4f6be.png)
跳转成功的话会是一个Microsoft账号登录页面,登录自己的Microsoft账号后就可以选择想要下载的安装包了:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9b734762-4c3a-11ec-94e8-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9b9fa83e-4c3a-11ec-94e8-fa163eb4f6be.png)
个人感觉一些比较老的版本官网提供的内容也不是很全,如果官网找不到想要的安装包,网上也有很多资源可以下载旧的VS版本。等我们下载好了之后,就可以进行安装了,这里以Visual Studio 2019的安装为例:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9be0a618-4c3a-11ec-94e8-fa163eb4f6be.png)
点击下载好的安装程序,会出现上面的窗口,点击继续开始安装,这里可能需要等一会儿,安装完成的窗口是这样的:
接下来配置自己需要的内容,先是工作负荷,我们可以选择自己需要的开发语言,下图我选择了Python和C++桌面开发两个选项:接下来可以添加自己想要的组件,语言环境,最后配置一下安装路径就可以了:如果之后想要修改这些配置的话可以直接打开Visual Studio Installer进行修改,非常方便:如果是第一次安装的话,会弹出窗口让我们选择开发环境和颜色主题,选好之后就可以直接启动Visual Studio了:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9d2ff230-4c3a-11ec-94e8-fa163eb4f6be.png)
这些设置也是可以随时更改的,在Visual Studio界面中的工具--选项中,可以更换主题颜色或者修改其他设置:![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9d58fc2a-4c3a-11ec-94e8-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9d754966-4c3a-11ec-94e8-fa163eb4f6be.png)
这样Visual Studio和Visual C++环境就都配置好了,我们可以直接在这里编写、测试C++程序,最后放一张Visual Studio 2019启动页面,不得不说真的比之前的版本好看太多![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9da535ea-4c3a-11ec-94e8-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9dc63c68-4c3a-11ec-94e8-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211123_9e1e9318-4c3a-11ec-94e8-fa163eb4f6be.png)
这一篇我真的是改了好久,感觉版本对应那里总是表达不清楚
希望我最后的图能够帮助大家理解吧。这一篇的重点就是OpenCV,VS和VC++三者之间的版本对应问题,有关OpenCV和VS的安装其实都很简单。下一篇是OpenCV安装包中build, sources还有从OpenCV3.0开始新增的opencv_contrib安装包中的内容讲解,理解了文件中的具体内容,我们在配置的时候就可以清晰地知道每一步是在做什么以及为什么要这么做。
~
END
~