
1.2.1 案例1:Windows动态库开发环境搭建
在Windows上进行C++开发,常用的IDE(集成开发工具)为Visual Studio,该软件由微软发布,最新版本为Visual Studio 2019(Visual Studio 2022正式版待发布)。本案例基于Visual Studio 2019开发,Visual Studio 2019的安装方法如下。
在安装前,读者需要去官网下载安装文件,对于个人开发者,可以选择下载社区版Community 2019,如图1.6所示。

图1.6
Community 2019下载的文件名为vs_Community.exe,双击该文件即可安装。在安装过程中,读者可以选择下载安装工作负载(不同开发环境)与单个组件,如图1.7所示。
Visual Studio 2019支持C++桌面开发、Python开发、Node.js开发等,读者可以选择自己需要的环境进行安装,本案例需要C++桌面开发,勾选相应的复选框,安装完成后重启即可使用。
OpenCV常用的两种开发语言是C++和Python,本节讲解在Windows下搭建OpenCV C++语言开发环境。开发环境搭建方法有两种:安装官方发布的库文件和源码编译。
源码编译的方法参见1.4节,此处介绍使用官方发布的库文件进行安装的方法。

图1.7
(1)进入官网,选择“Library”→“Releases”选项,进入Releases库文件包下载页面,根据相应的环境下载库文件,如图1.8所示。

图1.8
知识点:库文件分为Release和Debug两种形式,Release为发行版本,其中不含调试信息,在生成文件包时编译器会做优化,文件包较小;Debug为调试版本,含调试信息,用于开发人员开发调试,在正式发布产品中使用Release版本库文件。
本案例选择OpenCV 4.5.2版本,下载的文件名为opencv-4.5.2-vc14_vc15.exe,双击该文件解压,如图1.9所示。

图1.9
也可以右击该文件,在弹出的快捷菜单中选择“解压到当前文件夹”选项,得到文件夹opencv,其中包含两个子文件夹。
● sources:用于存放当前版本的源码。
● build:用于存放编译的二进制库文件。进入build文件夹,此路径下有6个文件夹。
➢ bin:存放第三方库依赖文件。
➢ etc:存放资源文件。
➢ include:存放头文件。
➢ java:存放Windows系统Java库文件。
➢ python:存放Windows系统Python语言安装文件。
➢ x64:用于存放Windows C++库文件,包含vc14和vc15两个版本。
知识点:vc为Visual Studio的编译器,vc14为Visual Studio 2015的编译器,vc15为Visual Studio 2017的编译器,而Visual Studio 2019的编译器为vc16。
对于Visual Studio 2019,可以选用x64文件夹下的子文件夹vc15中对应的库文件,vc15路径下包含两个文件夹:bin(存放动态库文件)和lib(存放静态库文件)。OpenCV工具库调用最重要的3个文件:头文件(存放于include文件夹中)、动态库(opencv_world452.dll或opencv_world452d.dll)及静态库(opencv_world452.lib或opencv_world452d.lib)。
(2)下载并解压完成后,需要配置OpenCV开发环境,并编写测试代码进行测试。
(3)打开Visual Studio 2019,创建新项目。创建项目时,可以直接选择创建控制台应用,这样创建的项目中有主程序,并默认输出“Hello World”,如图1.10所示。
(4)配置新项目,包括配置项目名称和项目位置;解决方案名称可以使用默认的名称,与项目名称相同,如图1.11所示。

图1.10

图1.11
(5)在项目中,需要配置OpenCV库引用才能使用OpenCV,需要配置3方面内容:包含目录、库目录和链接器依赖项,如图1.12所示。

图1.12
(6)在“链接器”→“输入”→“附加依赖项”中配置附加依赖项,即静态库文件名称,如图1.13所示(配置时注意选择Debug或Release对应的静态库文件)。

图1.13
(7)依次单击“应用”和“确定”按钮完成配置,然后编写测试代码测试OpenCV库的使用。本案例的测试方法为读取一幅图像,并将图像显示出来:

注意:在开发过程中,需要根据是Debug模式还是Release模式来选择不同的OpenCV库。其中,Debug模式配置opencv_world452d.lib库,而Release模式则配置opencv_world452.lib库。
(8)选择项目并右击,在弹出的快捷菜单中选择“生成”选项,编译项目。编译完成后,结果如图1.14所示。

图1.14
由于编译没有出错,所以此时可以单击图1.14中的“本地Windows调试器”按钮,或者按F5键运行项目。如果没有做额外的配置,则此时会弹出如图1.15所示的错误提示框。

图1.15
这个错误称为运行时错误,其常见原因是动态库文件无法找到或不匹配。这种问题的解决办法有如下两种。
● 第一种方法是将动态库路径配置到环境变量中。可以选择“计算机”→“属性”→“高级系统设置”→“环境变量”选项,找到Path变量,将OpenCV文件包中的opencv/build/x64/vc15/bin路径配置到环境变量中,这样运行时就能找到动态库的路径了。
● 第二种方法就是将动态库复制到生成的可执行文件所在的路径下,如图1.16所示。

图1.16
这两种方法都是为了让可执行文件OpenCVdemo.exe能在搜索路径中找到OpenCV的动态库文件,当前路径和环境变量都是Windows系统中可执行文件链接时的搜索路径。
再次执行“本地Windows调试器”命令,程序正常运行,如图1.17所示,表明在Windows系统中配置OpenCV C++语言开发环境完成。

图1.17
在使用C++语言开发时,需要包含"opencv2/opencv.hpp"头文件,该头文件对所有模块的头文件做了引用:


如果读者对OpenCV的结构比较熟悉,则在使用时可以只包含对应的某个模块,如图像滤波功能调用可以只包含"opencv2/imgproc.hpp"头文件,后续章节在讲解每个模块时,都会讲解包含该模块对应的头文件,通过导读内容可以查看当前模块导出的算法函数。