18
Part I 基础篇 OpenCV 开发基础 基础篇主要介绍 OpenCV 开发相关的基础知识,旨在让读者熟悉图像处理开 发环境以及简单的图像处理操作。本篇共两章:第 1 章主要介绍最新 OpenCV 本开发环境安装与配置;第 2 章主要介绍相关图像及视频基本操作,其中几何变 换是后续开发中的常用技术,图像基础应用操作典型实例来自于工程实践和实际 项目。初学者应认真熟读本篇,参考实现该部分程序。

基础篇 OpenCV开发基础 - Baidu

  • Upload
    others

  • View
    37

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 基础篇 OpenCV开发基础 - Baidu

Part I

基础篇 OpenCV 开发基础

基础篇主要介绍 OpenCV 开发相关的基础知识,旨在让读者熟悉图像处理开

发环境以及简单的图像处理操作。本篇共两章:第 1 章主要介绍 新 OpenCV 版

本开发环境安装与配置;第 2 章主要介绍相关图像及视频基本操作,其中几何变

换是后续开发中的常用技术,图像基础应用操作典型实例来自于工程实践和实际

项目。初学者应认真熟读本篇,参考实现该部分程序。

Page 2: 基础篇 OpenCV开发基础 - Baidu

1.1 OpenCV 初识 3

第 1 章

初识 OpenCV

本章主要探讨以下内容:

OpenCV 的发展历程 OpenCV 架构及其资源 VS 下 OpenCV 的安装配置 Sublime 下 OpenCV 的配置

Page 3: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 4

1.1 OpenCV 初识

1.1.1 OpenCV 简介

OpenCV 全称是 Open Source Computer Vision Library。OpenCV 是由因特尔公

司发起并参与开发的一个基于 BSD 开源发行的跨平台计算机视觉库。它有一系列

的接口,包括 C、C++、Python、MATLAB 和 Java,可以运行在 Windows、Linux、Mac OS、iOS 和 Android 系统上。OpenCV 实现了多种实时且高效的算法,随着

不断研发,C/C++接口函数库应用在大规模多核开发中,大大提升了软件算法的

可应用性。OpenCV 应用 OpenCL 接口开发技术,可以充分利用计算硬件底层平

台进行硬件加速。OpenCV 实现了图像处理和计算机视觉方面的很多通用算法,

因此在当前很多前沿领域有较多应用,如人机交互、机器视觉、运动检测与跟踪

及图像识别领域等。

OpenCV 历史发展进程如下:

2000 年 6 月,第一个开源版本 OpenCV alpha 3 发布。

2000 年 12 月,针对 Linux 平台的 OpenCV beta 1 发布。

2006 年 10 月,OpenCV 1.0 正式发布,Windows 安装包包含了支持 Python 的

模块,基于 C 语言接口。

2008 年 10 月,OpenCV 1.1Pre1 发布, Windows 可支持 VS2005、Python2.6,并且支持 OpenCV 可独立编译 CMake。

2009 年 9 月,OpenCV beta2.0 发布,引进了 C++接口,自动管理内存释放,

开源结构被重新组织规划,优化了许多函数及外部头文件。

2010 年 4 月,OpenCV 2.1 发布,支持 64 位系统,引入新的异常处理方法代

替 C 风格处理方法,优化了新的测试函数。

2010 年 10 月,OpenCV 2.2 发布,重新组织了库文件架构,将原先的 cxcore、cv、cvaux、highgui 和 ml 划分为 15 个新的库文件。

2011 年 6 月,OpenCV 2.3 发布,修正了许多 bug,提供更多的 C++接口文件

支持,重新编译生成新的 LIBS。

2012 年 3-11 月,发布 OpenCV 2.4.x(1、2、3),优化了多个函数接口,提

供更多系统的支持,支持 GPU 加速,修复多个 bug,版本库稳定。

2013 年 3-12 月,发布 OpenCV 2.4.x(4、5、6、7、8),更多系统支持(Java及 Android 接口),引进基于 OpenCL 的硬件加速模块。

2014 年 4-11 月,发布 OpenCV 2.4.x(9、10、11),优化了 OpenCL 硬件加

速模块及 CUDA,引入了 VTK 3D 模块,版本库更加稳定。

2015 年 4 月,发布 OpenCV 3.0 发布候选版本,引入了新的硬件加速层

Page 4: 基础篇 OpenCV开发基础 - Baidu

1.1 OpenCV 初识 5

OpenCV HAL 加速模块,引入独立 mpeg 解码器,库文件从多个合并为一个。

我们相信 OpenCV 的路会越走越远。

1.1.2 OpenCV 组件及架构

OpenCV 的快速发展更新,使得其系统架构不断完善。为了让读者快速上手

OpenCV 编程,以下将介绍目前开发常用的两个版本架构。

1. 基于 OpenCV2.4.x 组件及架构

对源文件 opencv-2.4.x.exe 进行解压缩后,OpenCV 文件下会出现以下子文件

目录(见图 1-1),需要说明的是,opencv-2.4.8 解压后文件夹目录仅包含 build和 sources 文件夹。其中常用文件夹 bulid 包含已编译好的头文件及库文件,doc文件夹存放与开发相关的技术文档,samples 文件夹主要存放自带的实例程序。

图 1-1 OpenCV2.4.x 组件

再进入到子文件…\build\include 目录,存在两个文件夹 opencv 和 opencv2,opencv 文件夹支持 OpenCV 1.x 接口的头文件(C),opencv2 文件夹支持 OpenCV 2.x 接口的头文件(C++)。再次进入 opencv2 文件夹,将会出现以下文件夹及文

件(见图 1-2),本书将着重叙述以 C++为接口基于 OpenCV 2.x 函数的功能及应用。

图 1-2 OpenCV2.4.x 中 opencv2 头文件目录

Page 5: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 6

以记事本方式打开该目录下 opencv.hpp 及 opencv_modules.hpp,我们可以看

到以下头文件(见代码 1-1、1-2):

代码 1-1 opencv.hpp 头文件

1 #ifndef __OPENCV_ALL_HPP__ 2 #define __OPENCV_ALL_HPP__ 3 #include "opencv2/core/core_c.h" 4 #include "opencv2/core/core.hpp" 5 #include "opencv2/flann/miniflann.hpp" 6 #include "opencv2/imgproc/imgproc_c.h" 7 #include "opencv2/imgproc/imgproc.hpp" 8 #include "opencv2/photo/photo.hpp" 9 #include "opencv2/video/video.hpp" 10 #include "opencv2/features2d/features2d.hpp" 11 #include "opencv2/objdetect/objdetect.hpp" 12 #include "opencv2/calib3d/calib3d.hpp" 13 #include "opencv2/ml/ml.hpp" 14 #include "opencv2/highgui/highgui_c.h" 15 #include "opencv2/highgui/highgui.hpp" 16 #include "opencv2/contrib/contrib.hpp" 17 #endif

代码 1-2 opencv_modules.hpp 头文件

1 #define HAVE_OPENCV_CALIB3D 2 #define HAVE_OPENCV_CONTRIB 3 #define HAVE_OPENCV_CORE 4 #define HAVE_OPENCV_FEATURES2D 5 #define HAVE_OPENCV_FLANN 6 #define HAVE_OPENCV_GPU 7 #define HAVE_OPENCV_HIGHGUI 8 #define HAVE_OPENCV_IMGPROC 9 #define HAVE_OPENCV_LEGACY 10 #define HAVE_OPENCV_ML 11 #define HAVE_OPENCV_NONFREE 12 #define HAVE_OPENCV_OBJDETECT 13 #define HAVE_OPENCV_PHOTO 14 #define HAVE_OPENCV_STITCHING 15 #define HAVE_OPENCV_TS 16 #define HAVE_OPENCV_VIDEO 17 #define HAVE_OPENCV_VIDEOSTAB

进入到子文件…\build\x86\vc10\lib 目录,我们可以看到 OpenCV 2.4.x 中存在

的所有 Libs 文件。如图 1-3 所示,我们看到有两类的 lib 文件,后 后面加 d 的

文件在应用开发的过程中应用于 dubug 调试版本,另外一种 lib 文件应用于 release发行版本。

从上面的两个头文件中我们就可以清楚看到OpenCV 2.4.9在开发应用中的主

要头文件及模块,以下将根据上述头文件详细介绍 OpenCV 2.4.9 的主要模块及结

构。

Page 6: 基础篇 OpenCV开发基础 - Baidu

1.1 OpenCV 初识 7

图 1-3 OpenCV2.4.9 中 LIBS 目录

Core——核心组件模块

基础结构及操作、动态结构、数组操作、绘图函数、XML/YAML、聚类及实

用程序和系统函数宏。

Imgproc——图像处理模块

图像滤波、几何图像变换、混合图像变换、直方图、结构分析及形状描述、

运动分析及目标跟踪、特征及目标检测。

Highgui——顶层 GUI 及视频 I/O

用户界面、读/写图像及视频、QT 新功能。

Video——视频分析

运动分析及目标跟踪。

Calib3d——摄像机标定及 3 维重建

摄像机标定及 3 维重建。

Features2d——2 维特征框架

特征检测与描述、特征检测提取匹配接口、关键点与匹配点绘图及对象分类。

Objdetect——目标检测

级联分类器及 SVM。

Ml——机器学习

统计模型、贝叶斯分类器、 近邻分类器、支持向量机、决策树、提升、梯

度提升树、随机树、超随机树、 大期望、神经网络及机器学习数据。

Flann——聚类及多维空间搜索

快速 近邻搜素及聚类。

Gpu——计算机视觉中 GPU 加速

GPU 模块及数据结构,包含图像处理与分析模块。

Page 7: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 8

Photo——计算图像

图像修复及去噪。

Stitching——图像拼接

图像拼接顶层操作函数、旋转、自动标定、仿射变换、接缝估计、曝光补充

及图像融合技术。

Nonfree——未免费功能

主要包含特征检测与描述相关受保护成果。

Contrib——贡献及实验成果

未成熟的理论应用,包含立体匹配、人脸识别、视网膜模型等。

Legacy——弃用的成果

运动分析、 大期望、直方图、CAPI、特征检测及描述等模块中弃用的成果。

Ocl——计算机视觉中 OpenCL 加速

计算机视觉中 OpenCL 加速模块。

2. 基于 OpenCV3.0 组件架构

对源文件 opencv-3.0.0.exe 进行解压缩后,OpenCV 文件下会出现以下子文件

目录(见图 1-4),其中常用文件夹 bulid 包含已编译好的各个系统下的头文件及

库文件,sources 文件夹存放开发相关的技术文档与资料、源程序数据模块及实例

程序等。

图 1-4 OpenCV3.0 组件

对比 OpenCV2.4.x 我们可以发现,OpenCV3.0 文件夹归档更清晰和简洁。再

进入到子文件…\build\x86\vc11\lib 目录,我们可以看到 lib 文件数量明显减少,改

进后的常用 lib 库有 opencv_ts300.lib 和 opencv_world300.lib。

图 1-5 OpenCV3.0 lib 文件

我们看到OpenCV3.0的组件架构更多的变化是以基于内核插件的方式来构建

系统的各个模块,这使得项目更稳定出色。进入…\source 目录中,我们可以看到

Page 8: 基础篇 OpenCV开发基础 - Baidu

1.2 VS2012 安装 OpenCV2.4.x 9

开发相关的源资料,文件夹分类信息明确,将原先相关平台的资料统一归类到

platforms 文件夹中,其余相关文件夹资料新增多项,实例程序及相关系统支持应

用更加完善。

1.1.3 OpenCV 资源

OpenCV 官方网站地址为 http://opencv.org,主要发布 新版 OpenCV 的相

关信息,在其页面可以获取 OpenCV 的历史版本及相关开发文档的资料链

接。 OpenCV github Itseez 主页为 https://github.com/Itseez,在其页面可以得到相

关 opencv_contrib、opencv 及 opencv_extra 的开源项目信息,所有项目都由

OpenCV 开发团队持续维护。 OpenCV bug 问题主页为 http://code.opencv.org/projects/opencv,在其页面可

以得到 OpenCV 相关的技术问答、版本信息及 bug 信息等资料。 OpenCV 开发技术文档地址为 http://docs.opencv.org/,在其页面可以得到

OpenCV 相关的 API 信息、用户说明及各个系统模块的介绍文档。 OpenCV CHINA 论坛地址为 http://www.opencvchina.com/forum.php,在其

页面可以得到 OpenCV 相关的计算机视觉开发资料,包括视频教学、中文

参考资料及提问问答等。 OpenCV 中文网站地址为 http://wiki.opencv.org.cn,在其页面可以得到

OpenCV 的中文参考手册、常见开发问题、安装例程、应用专题讲解以及

获取中文网站论坛资料。 OpenCV2.3.2 中文开发实例技术文档(翻译 OpenCV 自带 doc 文件下的

tutorials)地址为 http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ tutorials.html,在其页面可以获取相关各个模块典型的开发实例,可作为

OpenCV 佳入门级资料。

1.2 VS2012 安装 OpenCV2.4.x

步骤一:下载 Windows 安装包 OpenCV2.4.x 并解压。

本书以 OpenCV2.4.9 版本为例进行讲解,进入官网 http://sourceforge.net/ projects/opencvlibrary/files/opencv-win/,选择相应版本进行下载,选择解压缩到目

标路径 D:\Program Files,并在后面手动输入具体的 OpenCV 版本信息以构成

D:\Program Files\OpenCV2.4.9,如图 1-6 所示。

图 1-6 OpenCV2.4.9 解压缩路径

Page 9: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 10

步骤二:配置 OpenCV2.4.9 的环境变量。

Win7 下打开“控制面板”→“系统和安全”→“系统”→“高级系统设置”

→“环境变量”,新建用户变量 Path,在 OpenCV2.4.9 的 dll 文件所在的目录加

入 Path 环境变量。32 位系统下的 VS2012 添加 OpenCV2.4.9 dll 目录: D:\Program Files\OpenCV2.4.9\opencv\build\x86\vc11\bin

对于 64 位系统,除添加上述目录还需添加以下目录: D:\Program Files\OpenCV2.4.9\opencv\build\x64\vc11\bin

如图 1-7 所示,添加完上述 Path 环境变量后,重启系统后可生效(若只是在

当前用户下建立 Path 环境变量,可注销系统或在 cmd 下输入 set path c:\)。

图 1-7 配置 Path 环境变量

步骤三:配置 VS 工程目录。

在 VS2012 下新建 Win32 应用台控制程序的空项目 HelloOpencvTest,添加

main.cpp 源文件,在 VS2012 主菜单栏的视图菜单栏下选择属性管理器,如图 1-8所示。

图 1-8 HelloOpencvTest 属性管理器

选择“Debug”→“Microsoft.Cpp.Win32.user”,右键选择属性页面,选择左

侧菜单 VC++目录,如图 1-9 所示。在包含目录文件中添加以下目录:

Page 10: 基础篇 OpenCV开发基础 - Baidu

1.2 VS2012 安装 OpenCV2.4.x 11

D:\Program Files\opencv2.4.9\opencv\build\include D:\Program Files\opencv2.4.9\opencv\build\include\opencv D:\Program Files\opencv2.4.9\opencv\build\include\opencv2

选择“Release”→“Microsoft.Cpp.Win32.user”,右键选择属性页面,选择

左侧菜单 VC++目录,在包含目录文件中添加以下目录: D:\Program Files\opencv2.4.9\opencv\build\include D:\Program Files\opencv2.4.9\opencv\build\include\opencv D:\Program Files\opencv2.4.9\opencv\build\include\opencv2

需要说明的是,如果不在属性管理器中完成 VS 工程目录配置,仅仅在解决

方案中配置 VS 工程目标及其相关设置,那么在使用 VS2012 新建 OpenCV 项目

时都需要再重新配置。

图 1-9 VC++目录下包含目录的设置

再选择库目录进行状态编辑,方法同包含目录的设置,如图 1-10 所示。32位系统下在库目录中添加以下目录:

D:\Program Files\opencv2.4.9\opencv\build\x86\vc10\lib

图 1-10 VC++目录下库目录的设置

Page 11: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 12

64 位系统下可选择目录: D:\Program Files\opencv2.4.9\opencv\build\x64\vc10\lib

另外我们也可以将工程链接库设置为静态链接库: D:\ProgramFiles\opencv2.4.9\opencv\ build\x86\vc10\staticlib

这样我们开发出来的软件将包含OpenCV库,可运行于没有安装配置OpenCV开发环境的系统中。

选择左侧的“链接器”→“输入”,打开附加依赖项窗口,添加工程需要的

lib 库,如图 1-11 所示。根据上节中 OpenCV 组件相关模块的介绍添加相应的 lib库文件,在 Debug 下选择后 加 d 的 lib 库,OpenCV 版本所有的 lib 库如下所示。

1. opencv_calib3d249d.lib 2. opencv_contrib249d.lib 3. opencv_core249d.lib 4. opencv_features2d249d.lib 5. opencv_flann249d.lib 6. opencv_gpu249d.lib 7. opencv_highgui249d.lib 8. opencv_imgproc249d.lib 9. opencv_legacy249d.lib 10. opencv_ml249d.lib 11. opencv_objdetect249d.lib 12. opencv_ts249d.lib 13. opencv_video249d.lib 14. opencv_nonfree249d.lib 15. opencv_ocl249d.lib 16. opencv_photo249d.lib 17. opencv_stitching249d.lib 18. opencv_superres249d.lib 19. opencv_videostab249d.lib

图 1-11 Debug 下 lib 库的配置

Page 12: 基础篇 OpenCV开发基础 - Baidu

1.2 VS2012 安装 OpenCV2.4.x 13

以上配置是在 Debug 下举例,Win32 下的 Release 属性管理配置方法同上,

需要注意的就是 lib 库配置需添加以下 lib 库:

1. opencv_calib3d249d.lib 2. opencv_contrib249.lib 3. opencv_core249.lib 4. opencv_features2d249.lib 5. opencv_flann249.lib 6. opencv_gpu249.lib 7. opencv_highgui249.lib 8. opencv_imgproc249.lib 9. opencv_legacy249.lib 10. opencv_ml249.lib 11. opencv_objdetect249.lib 12. opencv_ts249.lib 13. opencv_video249.lib 14. opencv_nonfree249.lib 15. opencv_ocl249.lib 16. opencv_photo249.lib 17. opencv_stitching249.lib 18. opencv_superres249.lib 19. opencv_videostab249.lib

步骤四:测试 OpenCV 开发环境是否正确配置。

在 main.cpp 中添加代码 1-3,运行该工程程序,分别测试 Debug 与 Release下 OpenCV 环境是否正确配置。

代码 1-3 测试 OpenCV 示例 1

1 // 头文件 2 #include "opencv2/imgproc/imgproc.hpp" 3 #include "opencv2/highgui/highgui.hpp" 4 int main( ) 5 {

6 // 读取源图像并转化为灰度图像 7 cv::Mat srcImage = cv::imread("..\\images\\flower.jpg");

8 // 判断文件是否读入正确 9 if( !srcImage.data ) 10 return 1;

11 // 图像显示 12 cv::imshow("srcImage", srcImage);

13 // 等待键盘键入 14 cv::waitKey(0); 15 return 0; 16 }

程序运行结果如图 1-12 所示。

Page 13: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 14

图 1-12 图像显示测试 1

1.3 VS2013 安装 OpenCV3.0

步骤一:安装并解压 OpenCV3.0 软件开发包。

下载 Windows 安装包 opencv-3.0.0-rc1.exe,进入 OpenCV 官网 http:// sourceforge.net/projects /opencvlibrary/files/opencv-win/,选择相应版本进行下载,

解压缩到目标路径 D:\ProgramFiles\opencv3.0。

步骤二:配置 VS2013 开发环境下 OpenCV3.0 的环境变量。

方法基本同配置 OpenCV2.4.9 的环境变量,需要注意的是添加用户变量 Path,32 位系统 VS2013 添加 dll 目录:

D:\ProgramFiles\opencv3.0\opencv\build\x86\vc12\bin

64 位系统 VS2013 添加 dll 目录: D:\ProgramFiles\opencv3.0\opencv\build\x64\vc12\bin

添加完上述 Path 环境变量后,可在重启系统后生效。

步骤三:配置 VS2013 工程属性。

在 VS2013 的 Win32 应用台控制程序属性管理器的包含目录文件中添加以下

目录: D:\ProgramFiles\opencv3.0\opencv\build\include D:\ProgramFiles\opencv3.0\opencv\build\include\opencv D:\ProgramFiles\opencv3.0\opencv\build\include\opencv2

按照 1.2 节方法设置库目录,32 位系统下在库目录添加以下目录: D:\ProgramFiles\opencv3.0\opencv\build\x86\vc12\lib

64 位系统下可选择以下目录: D:\ProgramFiles\opencv3.0\opencv\build\x64\vc12\lib

后添加工程相应的 lib 库,Win32 的 Debug 下添加:

Page 14: 基础篇 OpenCV开发基础 - Baidu

1.3 VS2013 安装 OpenCV3.0 15

opencv_world300d.lib,opencv_ts300d.lib

Win32 的 Release 下添加 opencv_world300.lib、opencv_ts300.lib。

按照以上步骤完成 OpenCV3.0 的配置,可根据 1.2 节中的步骤四进行测试验

证(测试代码见代码 1-4)。

代码 1-4 测试 OpenCV 示例 2

1 // 头文件 2 #include "opencv2/imgproc/imgproc.hpp" 3 #include "opencv2/highgui/highgui.hpp"

4 // 使用标准的 cv 库 5 using namespace cv; 6 int main( ) 7 {

8 // 读取源图像并转化为灰度图像 9 Mat srcImage = cv::imread("..\\images\\flower.jpg");

10 // 判断文件是否读入正确 11 if( !srcImage.data ) 12 return 1;

13 // 图像显示 14 imshow("srcImage", srcImage);

15 // 等待键盘键入 16 waitKey(0); 17 return 0; 18 }

程序运行结果如图 1-13 所示。

图 1-13 图像显示测试 2

需要说明的是,程序 1-3 与 1-4 的不同之处在于后者应用了标准的 OpenCV库 using namespace cv,程序中 Mat、imshow 及 waitKey 调用标准库类或函数,本

书建议读者采用程序 1-1 中的方式进行编程,程序更清晰。在实际应用 OpenCV进行图像处理开发时,lib 库中相应的 dll 文件可根据实际需要进行增减。

Page 15: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 16

1.4 Sublime 下配置 OpenCV

Sublime Text 是一个灵活出色的文本代码编辑器。Sublime Text 是收费软件,

但可以免费无限制无限期地试用。Sublime Text 是由程序员 Jon Skinner 于 2008 年

1 月份开发出来的,它 初被设计为一个具有丰富扩展功能的 Vim。Sublime Text支持多种编程语言的语法高亮,拥有优秀的代码自动完成功能,还拥有代码片段

(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时调用。Sublime Text 还具有良好的扩展能力和完全开放的用户自定义配置以及神奇实用的编辑状

态恢复功能。

下面将介绍如何在 Sublime 下配置 OpenCV 开发环境。

步骤一:下载 Sublime Text。

进入官方网站 http://www.sublimetext.com,选择 Windows 下安装包 Sublime Text 2.0.2 Setup.exe(见图 1-14),下载到本地后直接安装,可根据官网介绍安装

相应插件及设置开发环境。详细配置建议可参考 Lucida 的博文,地址为

http://zh.lucida.me/blog/sublime-text-complete-guide/。

图 1-14 下载 Sublime

步骤二:下载安装 MinGW 与设置系统变量。

文 本 代 码 编 辑 器 需 要 利 用 C/C++ 编 译 器 gcc/g++ , 进 入 官 网

http://sourceforge.net/projects/mingw/,选择相应版本进行下载(见图 1-15)。

图 1-15 下载 MinGW

下载完成后解压到 C:\MinGW,然后设置系统环境变量,按照 1.2 节中的步骤

二,选择“计算机”→“属性”→“高级系统设置”→“环境变量”,新建用户

的环境变量 HOME_MINGW,变量值为 C:\MinGW\bin(见图 1-16),设置完环

境变量后重启计算机或注销系统后生效。完成环境变量设置后,可在 cmd 下输入

g++来检查设置环境的 g++版本,再键入 set path c:\来检查上述用户环境变量是否

已经正确配置。

Page 16: 基础篇 OpenCV开发基础 - Baidu

1.4 Sublime 下配置 OpenCV 17

图 1-16 inGW 环境变量配置

步骤三:下载安装 OpenCV2.4.x 软件开发包(详细步骤请参考 1.2 节中步骤

一与步骤二)。

本部分以 OpenCV2.4.4 的配置为例,其他版本类似,另外需要注意的是,

Sublime 下需要利用 MinGW 进行编译链接 OpenCV2.4.x,因此需要配置相应的环

境变量,可按照 1.2 节中配置 MinGW 环境变量来配置,如图 1-17 所示(变量值

为 D:\ProgramFiles\opencv2.4.4\opencv\build\x86\mingw\bin)。

图 1-17 OpenCV 下 MinGW 环境变量配置

需要说明的是,官网的后续 OpenCV2.4.x 软件开发包中没有提供相关 MinGW版本库,若读者需要更新版本,则需要通过 CMake 来完成相关版本的制作,具体

方法可参考下面这篇博客文章: http://blog.csdn.net/yanzi1225627/article/details/26408579

步骤四:新建编译系统 C++及 OpenCV。

打开 sublime 界面,选择“工具”→“编译系统”→“新编译系统”,新建

my_C++.sublime-build 编译文件,输入代码 1-5。

代码 1-5 设置 my_C++.sublime-build

1 { 2 "cmd": ["g++", "${file}", "-o", 3 "${file_path}/${file_base_name}"], 4 "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", 5 "working_dir": "${file_path}", 6 "selector": "source.c, source.cpp,source.c++", 7 "variants": 8 [ 9 { 10 "name": "Run", 11 "cmd" : ["${file_path}/${file_base_name}"] 12 }

Page 17: 基础篇 OpenCV开发基础 - Baidu

第 1 章 初识 OpenCV 18

13 ] 14 }

新建 my_ opencv.sublime-build 编译文件,输入代码 1-6。

代码 1-6 设置 my_ opencv.sublime-build

1 { 2 "cmd": ["g++", "${file}", "-o", 3 "${file_path}/${file_base_name}","-I", 4 "D:/Program Files/opencv2.4.4/opencv/build/include", 5 "-I","D:/ProgramFiles/opencv2.4.4/opencv/build/ 6 include/opencv","-I","D:/Program Files/opencv2.4.4/ 7 opencv/build/include/opencv2","-L", 8 "D:/Program Files/opencv2.4.4/opencv/build/ 9 x86/mingw/lib", 10 11 "-l", "opencv_core244", "-l", "opencv_imgproc244", 12 "-l", "opencv_calib3d244","-l", "opencv_video244", 13 "-l", "opencv_features2d244", "-l", "opencv_ml244", "-l", 14 "opencv_highgui244","-l", "opencv_objdetect244", "-l", 15 "opencv_legacy244", "-l", "opencv_flann244"], 16 17 "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", 18 "working_dir": "${file_path}", 19 "selector": "source.c, source.c++, source.cpp", 20 "encoding": "gbk", 21 "variants": 22 [ 23 { 24 "name": "Run", 25 "cmd" : ["${file_path}/${file_base_name}"] 26 } 27 ] 28 }

步骤五:测试 Sublime 下 OpenCV 开发环境是否正确配置。

在菜单工具栏选择文件操作,新建 test.cpp 文件,添加代码 1-7,测试 Sublime环境是否配置正确,该测试用例的原理及实现方法将在后续章节中详细叙述。

代码 1-7 测试 Sublime 示例

1 #include "opencv2/imgproc/imgproc.hpp" 2 #include "opencv2/highgui/highgui.hpp" 3 int main( ) 4 {

5 // 读取图像 6 cv::Mat srcImage = cv::imread("..\\images\\flower4.jpg");

7 // 图像读取是否成功 8 if( !srcImage.data ) 9 return 1;

Page 18: 基础篇 OpenCV开发基础 - Baidu

1.5 小结 19

10 // 对图像的缩放与旋转,旋转中心 11 cv::Point2f center = 12 cv::Point2f(srcImage.cols / 2, srcImage.rows / 2);

13 // 旋转角度 14 double angle = 60;

15 // 缩放尺度 16 double scale = 0.5;

17 // 计算旋转的仿射变换矩阵 18 cv::Mat rotateImage; 19 rotateImage = cv::getRotationMatrix2D(center, 20 angle, scale);

21 // 仿射变换 22 cv::Mat rotateImg; 23 cv::warpAffine(srcImage, rotateImg, rotateImage, 24 srcImage.size());

25 // 图像显示 26 cv::imshow("srcImage", srcImage); 27 cv::imshow("rotateImg",rotateImg); 28 cv::waitKey(0); 29 return 0; 30 }

程序运行结果如图 1-18 所示。

(a)源图像 (b)旋转后

图 1-18 测试 Sublime 示例

1.5 小结

本章讲解了 OpenCV 的发展历程与 OpenCV 库的基本知识,以及 VS 下

OpenCV 的安装与 Sublime 下 OpenCV 的配置,让您清晰熟悉配置图像处理开发

软件的基本流程。随着 OpenCV 版本不断更新,VS 下的配置越来越简便,本章只

给出了典型版本的配置方法,读者可借鉴以实现其他不同版本的软件开发配置。

另外推荐读者使用 Sublime 超文本代码编辑器,可以大大提高算法类库开发效率,

相信您会爱不释手。