OpenCV入门基础教育材料.doc





《OpenCV入门基础教育材料.doc》由会员分享,可在线阅读,更多相关《OpenCV入门基础教育材料.doc(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-+ OpenCV 入门教程 作者:于仕琪 http:/ 2012年8月 版权所有 于仕琪 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。 前 言 OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多初学者希望快速掌握 OpenCV 的使用方法,但往往会遇到各种各样的困难。其实仔细分析,造成这些困难的原因有两类:第一类是 C/C+编程基础不过关;第二类是不了解算法原理。解决这些困难无非提升编程能力,以及提升理论基础知识。提升编程能力需要多练习编程,提升理论知识需要系统学习数字图像处理
2、、计算机视觉和模式识别等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。 同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习方式。本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数据结构以及用法。 此外,如您发现有错误之处,欢迎来信指正。 于仕琪 深圳大学 插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的研究生。欲了解详情可以访问深圳大学招生网 http:/ 或者给我发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 的协议
4、 . 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 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
5、感兴趣区域 . 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 读视频 .
6、47 4.2.2 写视频 . 49 第1章 预备知识 OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计算机视觉理论知识外,还需要具有一定的编程能力。本书作者通过对 OpenCV 中文论坛中的大量问题观察,发现有很大比例的问题是因为用户对 C/C+语言不熟练,导致出错,或出错后不知如何解决。如果对 C/C+语言不熟悉,那使用 OpenCV 时会满头雾水瞎摸索,费心费力。 在这一章中,将介绍一些编程的基本概念,让读者对编程的流程有一个基本了解。这样在出现错误时,可以快速确定错误的类型,并知道该如何解决。 1.1 编程的流程 一个编程的基本流程包括编辑、编译和连接三大步骤。其
7、流程图如图 1.1 所示。 编辑 编译 a.cpp a.obj opencv_core.lib 编辑 编译 b.cpp b.obj 连接 main.exe 图 1.1 编程的基本流程 1.2 什么叫编辑 编辑(edit)代码即编写代码,是编程的第一步。你可以任意一个编辑器进行代码的编写。你可以使用 Windows 自带的“记事本”来编写代码,也可以使用Notepad+,或者 Visual Studio 提供的编辑器。 图 1.2 使用 Windows 自带的记事本编辑代码 虽然可以使用记事本软件编辑代码,但是记事本软件的功能非常有限。缺少常用的语法高亮,自动缩进等功能。所以可以使用其他功能更丰
8、富的编辑器,如Notepad+(图 1.3)等。 图 1.3 使用 Notepad+软件编辑代码 1.3 什么叫编译 编译(compile)是将用某种编程语言(如 C+语言)写成的源代码,转换成目标文件。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据。编译器(compiler)是实现这一目的的软件。编译器有很多,如在 Windows 下有微软公司的 cl.exe,在 Linux 下有 gcc 和 g+。在命令行下使用 cl.exe 对 hello.cpp 源代码进行编译,如图 1.4 所示。编译后,将得到目标文件 hello.obj,如图 1.5 所示。 图
9、1.4 在命令行下使用 cl.exe 对 hello.cpp 进行编译 图 1.5 编译后,将新生成 hello.obj 目标文件 1.4 什么叫连接 连接(link)是将多个目标文件,以及库文件生成可执行的文件(或静态库、或动态库)的过程。连接器(linker)是实现这一目的的软件。常用的连接器有Windows 下的 link.exe,Linux 下的 ld 等。 在 Windows 下可以使用 link.exe 将前面生成的 hello.obj 连接为可执行文件。在命令行下效果如所图 1.6 示。连接后,将生成可执行文件,如图 1.7 所示。 图 1.6 在命令行下使用 link.exe
10、对 hello.obj 进行连接 图 1.7 连接后,将新生成 hello.exe 可执行文件 1.5 什么叫运行 运行(run)较容易理解,我们在 Windows 资源管理器里用鼠标双击 exe 可执行程序,可以使程序被载入 CPU 运行。我们也可以在命令行窗口中输入可执行程序的文件名运行,如图 1.8 所示。 图 1.8 在命令行窗口中运行 hello.exe,可以看到程序打印到标准输出的结果。 1.6 Visual C+是什么 通过前面的介绍,可以看到一个编程的流程:编辑-编译-连接-运行。更具体来说,完成这个流程需要你: 1. 打开记事本软件,编辑代码,并保存; 2. 在命令行下运行编
11、译器,对代码进行编译,生成目标文件; 3. 在命令行下运行连接器,将目标文件连接起来,生成可执行程序; 4. 在命令行下,或 Windows 资源管理器中运行程序,验证程序的正确性。 如果你的项目只有一个源代码文件,完成上面四个步骤尚可接受。但是如果你的项目包括几十个甚至几百个源文件,如无其他软件辅助,只用上面四个非常基本的步骤进行编程开发,会让人抓狂。 集成开发环境(Integrated Development Environment,简称 IDE)可以帮助你对项目进行管理。常用的 IDE 有微软公司的 Visual Studio,里面包含 Visual C+, Visual C#等,其他的
12、还有 Eclipse、NetBeans、Delphi 等。因此我们平时所说的 VC 不是一种编程语言,也不是编译器,它只是一个 IDE。 IDE 一般包含编辑器。IDE 自带的编辑器一般都针对编程语言进行了定制,实现语法高亮、自动缩进、自动补全等方便的功能。IDE 还提供丰富的菜单和按钮工具,如图 1.9、图 1.10 和图 1.11 所示。 如果你点击 IDE 中的“生成(build)”按钮(图 1.11),或者点击菜单“生成(build)”中的菜单项“生成项目(build project)”,那么 IDE 会去调用编译器 cl.exe 和连接器 link.exe 来生成可执行程序。如果你在
13、调试状态下,还会去调用调试器(debugger)。IDE 会提升程序开发的效率,特别是调试程序的效率。 图 1.9 微软 Visual Stdio 集成开发环境 图 1.10 Visual Stdio 中的编辑按钮 图 1.11 Visual Stdio 中的生成程序按钮 1.7 头文件 在编程过程中,程序代码往往被拆成很多部分,每部分放在一个独立的源文件中,而不是将所有的代码放在一个源文件中。考虑一个简单的小例子:程序中有两个函数 main()和 foo()。main()函数位于 main.cpp,foo()函数位于 foo.cpp, main()函数中调用 foo()函数。在编译阶段,由于
14、编译是对单个文件进行编译,所以编译 main.cpp 时,编译器不知道是否存在 foo()函数以及 foo()调用是否正确,因此需要头文件辅助。也就是说,在编译命令: cl.exe /c main.cpp 运行时,编译器不知道 foo 的用法是否正确(因为 foo 在另一个文件 foo.cpp 中),只有借助头文件中的函数声明来判断。对 main.cpp 进行编译时,不会涉及 foo.cpp 文件,只会涉及 main.cpp 和 foo.h(因为 foo.h 被 include)文件。头文件的作用如图 1.1 所示。 #include foo.h int main() int i=foo(3,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- opencv 入门 基础教育 材料

限制150内