
2
前 言
OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了
很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多
初学者希望快速掌握 OpenCV 的使用方法,但往往会遇到各种各样的困难。其
实仔细分析,造成这些困难的原因有两类:第一类是 C/C++编程基础不过关;
第二类是不了解算法原理。解决这些困难无非提升编程能力,以及提升理论基
础知识。提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图
像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,
需要耐下心来认真修炼。
同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉
应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV,
只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习
方式。本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数
据结构以及用法。
此外,如您发现有错误之处,欢迎来信指正。
于仕琪
深圳大学
插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的
研究生。欲了解详情可以访问深圳大学招生网 http://zsb.szu.edu.cn/ 或者
给我发 email。

3
目录
第 1 章 预备知识 ............................................................................................... 5
1.1 编程的流程........................................................................................ 5
1.2 什么叫编辑........................................................................................ 6
1.3 什么叫编译........................................................................................ 6
1.4 什么叫连接........................................................................................ 7
1.5 什么叫运行........................................................................................ 7
1.6 Visual C++是什么 .................................................................................. 8
1.7 头文件................................................................................................ 9
1.8 库文件.............................................................................................. 10
1.9 OpenCV 是什么 ................................................................................... 11
1.10 什么是命令行参数.......................................................................... 12
1.11 常见编译错误.................................................................................. 13
1.11.1 找不到头文件 ......................................................................... 13
1.11.2 拼写错误 ................................................................................. 14
1.12 常见链接错误.................................................................................. 15
1.13 运行时错误...................................................................................... 17
第 2 章 OpenCV 介绍 ................................................................................... 19
2.1 OpenCV 的来源 ................................................................................... 19
2.2 OpenCV 的协议 ................................................................................... 19
第 3 章 图像的基本操作 ................................................................................. 21
3.1 图像的表示...................................................................................... 21
3.2 Mat 类 ................................................................................................. 23
3.3 创建 Mat 对象 ................................................................................. 24
3.3.1 构造函数方法 ........................................................................... 24
3.3.2 create()函数创建对象 ............................................................... 25
3.3.3 Matlab 风格的创建对象方法 ................................................... 26

4
3.4 矩阵的基本元素表达...................................................................... 26
3.5 像素值的读写.................................................................................. 27
3.5.1 at()函数 ...................................................................................... 28
3.5.2 使用迭代器 ............................................................................... 29
3.5.3 通过数据指针 ........................................................................... 30
3.6 选取图像局部区域.......................................................................... 32
3.6.1 单行或单列选择 ....................................................................... 32
3.6.2 用 Range 选择多行或多列 ....................................................... 33
3.6.3 感兴趣区域 ............................................................................... 33
3.6.4 取对角线元素 ........................................................................... 34
3.7 Mat 表达式 ......................................................................................... 34
3.8 Mat_类 ................................................................................................ 36
3.9 Mat 类的内存管理 ............................................................................. 38
3.10 输出.................................................................................................. 40
3.11 Mat 与 IplImage 和 CvMat 的转换 ................................................. 42
3.11.1 Mat 转为 IplImage 和 CvMat 格式 .......................................... 42
3.11.2 IplImage 和 CvMat 格式转为 Mat ........................................... 42
第 4 章 数据获取与存储 ................................................................................. 44
4.1 读写图像文件.................................................................................. 44
4.1.1 读图像文件 ............................................................................... 44
4.1.2 写图像文件 ............................................................................... 45
4.2 读写视频.......................................................................................... 47
4.2.1 读视频 ....................................................................................... 47
4.2.2 写视频 ....................................................................................... 49

5
第1章 预备知识
OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计
算机视觉理论知识外,还需要具有一定的编程能力。本书作者通过对 OpenCV 中
文论坛中的大量问题观察,发现有很大比例的问题是因为用户对 C/C++语言不熟
练,导致出错,或出错后不知如何解决。如果对 C/C++语言不熟悉,那使用 OpenCV
时会满头雾水瞎摸索,费心费力。
在这一章中,将介绍一些编程的基本概念,让读者对编程的流程有一个基本
了解。这样在出现错误时,可以快速确定错误的类型,并知道该如何解决。
1.1 编程的流程
一个编程的基本流程包括编辑、编译和连接三大步骤。其流程图如图 1.1 所
示。
编辑
编译
a.cpp
a.obj
opencv_core.lib
编辑
编译
b.cpp
b.obj
连接
main.exe