学习OpenCV4:OpenCV各模块介绍 Windows上进行C++开发,常用的IDE(集成开发工具)为Visual Studio,该软件由微软发布,最新版本为Visual Studio 2019(Visual Studio 2022正式版待发布)。本案例基于Visual Studio 2019开发,Visual Studio 2019的安装方法如下。
安装前读者需要去官网(https://visualstudio.microsoft.com/zh-hans/vs/)下载安装文件,对于个人开发者,可以选择下载社区版Community 2019,如图1.6所示。
图1.6
Community 2019下载的文件名称为vs_Community.exe,双击该文件进行安装,安装过程中读者可以选择下载安装工作负载(即不同开发环境)与单个组件,如图1.7所示。
图1.7
Visual Studio 2019支持C++桌面开发,Python开发,Node.js开发等,读者可以选择自己需要的环境进行安装,本案例需要C++桌面开发,勾选安装即可,安装完成重启即完成了Visual Studio 2019的安装。
OpenCV常用的两种开发语言是C++和Python,本节讲解在Windows下搭建OpenCV C++语言开发环境,环境搭建方法有两种:安装官方发布的库文件和源码编译。
第一种方法:库文件安装
使用库文件安装的方法进行环境搭建过程如下:
首先下载库文件,如图1.8所示,进入官网选择Library->Releases,进入Release库文件包下载页面。
图1.8
在图1.8中选择Windows系统的文件下载,点击选择之后会自动开始下载。
本案例选择OpenCV-4.5.2版本,下载的文件名为opencv-4.5.2-vc14_vc15.exe,双击该文件解压,如图1.9所示。
图1.9
也可以右键选择文件,“解压到当前文件夹”,会在当前路径下解压得到文件夹opencv,其中包含两个子文件夹:
– build,存放编译的二进制库文件;
– sources,存放当前版本的源码。
进入build文件夹,路径下有六个文件夹:
– bin,存放第三方库依赖文件;
– etc,存放资源文件;
– include,存放头文件;
– java,存放Windows系统Java库文件;
– python,存放Windows系统Python语言安装文件;
– x64存放Windows C++库文件,包含vc14和vc15两个版本。
对于Visual Studio 2019,可以选用最新版本的vc15编译器对应的库文件,vc15路径下包含两个文件夹:bin(存放动态库文件)和lib(存放静态库文件),OpenCV工具库调用最重要的三个文件为:头文件(存放于include文件夹)、动态库(opencv_world452.dll或者opencv_world452d.dll)以及静态库(opencv_world452.lib或者opencv_world452d.lib)。
下载解压完成后,需要配置OpenCV开发环境,并编写测试代码进行测试。
选择打开Visual Studio 2019,创建新项目。创建项目可以直接选择创建“控制台应用”,创建的项目中有主程序,并默认输出“Hello World”,如图1.10所示。
图1.10
配置新项目,设置项目名称和项目位置,解决方案名称可以使用默认的,和项目名称相同,如图1.11所示。
图1.11
在项目中需要配置OpenCV库引用才能使用OpenCV,环境配置需要配置三个方面内容:包含目录,库目录和链接器依赖项。包含目录与库目录的配置如图1.12所示。
图1.12
在“链接器-输入-附加依赖项”中配置附加依赖项,即静态库文件名称,如图1.13所示,配置时注意选择Debug或Release对应的静态库文件。
图1.13
选择“应用”和“确定”后即完成配置,然后编写测试代码测试OpenCV库的使用,本案例的测试方法为读取一张图像,并将图像显示出来。
// OpenCVdemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat img = cv::imread("src.jpg", 1); //图像读取
cv::imshow("测试图像显示", img); //图像显示
cv::waitKey(0); //等待读者操作
cv::destroyWindow("测试图像显示"); //窗口对象销毁
}
选择项目,点击右键“生成”,编译项目,编译完成结果如图1.14所示。
图1.14
编译没有出错,此时可以点击图1.14中的“本地Windows调试器”或者按下F5,运行项目。如果读者没有做额外的配置,此时运行项目会弹出图1.15所示的错误框。
图1.15
这个错误称为“运行时错误”,运行时错误的常见原因是动态库文件无法找到或者不匹配。这种问题的解决办法有如下两种:
n 第一种方法是将动态库路径配置到环境变量中。读者可以选择“计算机—>属性—>高级系统设置—>环境变量”,找到Path变量,将OpenCV文件包中的opencv/build/x64/vc15/bin路径配置到环境变量中,这样运行时就能找到动态库的路径。
n 第二种方法就是将动态库拷贝到生成的可执行文件所在路径中,如图1.16所示。
图1.16
这两种办法是为了让可执行文件OpenCVdemo.exe能在搜索路径中找到OpenCV的动态库文件,当前路径和环境变量都是Windows系统中可执行文件链接时的搜索路径。
再次执行,程序正常运行,如图1.17所示,表明Windows系统中配置OpenCV C++语言开发环境完成。
图1.17
在C++语言开发时,需要包含"opencv2/opencv.hpp"头文件,该头文件对所有模块的头文件做了引用:
#ifndef OPENCV_ALL_HPP
#define OPENCV_ALL_HPP
// 该头文件仅用于定义哪些模块参与了编译,定义了HAVE_OPENCV_modulename的值
#include "opencv2/opencv_modules.hpp"
// Core模块为必需的模块
#include "opencv2/core.hpp"
// 通过HAVE_OPENCV_modulename检查可选模块的引入
#ifdef HAVE_OPENCV_CALIB3D
#include "opencv2/calib3d.hpp"
#endif
#ifdef HAVE_OPENCV_FEATURES2D
#include "opencv2/features2d.hpp"
#endif
#ifdef HAVE_OPENCV_DNN
#include "opencv2/dnn.hpp"
#endif
#ifdef HAVE_OPENCV_FLANN
#include "opencv2/flann.hpp"
#endif
#ifdef HAVE_OPENCV_HIGHGUI
#include "opencv2/highgui.hpp"
#endif
#ifdef HAVE_OPENCV_IMGCODECS
#include "opencv2/imgcodecs.hpp"
#endif
#ifdef HAVE_OPENCV_IMGPROC
#include "opencv2/imgproc.hpp"
#endif
#ifdef HAVE_OPENCV_ML
#include "opencv2/ml.hpp"
#endif
#ifdef HAVE_OPENCV_OBJDETECT
#include "opencv2/objdetect.hpp"
#endif
#ifdef HAVE_OPENCV_PHOTO
#include "opencv2/photo.hpp"
#endif
#ifdef HAVE_OPENCV_STITCHING
#include "opencv2/stitching.hpp"
#endif
#ifdef HAVE_OPENCV_VIDEO
#include "opencv2/video.hpp"
#endif
#ifdef HAVE_OPENCV_VIDEOIO
#include "opencv2/videoio.hpp"
#endif
#endif
如果读者对OpenCV结构比较熟悉,在使用时可以只包含对应的某个模块,如图像滤波功能调用可以只包含"opencv2/imgproc.hpp"头文件,在后续章节讲解每个模块时,都会讲解包含该模块对应的头文件,导读内容可以查看当前模块暴露的算法函数。