logo资料库

OpenCV入门教程.pdf

第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
资料共51页,剩余部分请下载后查看
OpenCV 入门教程 作者:于仕琪 shiqi.yu@szu.edu.cn http://www.opencv.org.cn 2012 年 8 月 版权所有© 于仕琪 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。 1
前 言 OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了 很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多 初学者希望快速掌握 OpenCV 的使用方法,但往往会遇到各种各样的困难。其 实仔细分析,造成这些困难的原因有两类:第一类是 C/C++编程基础不过关; 第二类是不了解算法原理。解决这些困难无非提升编程能力,以及提升理论基 础知识。提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图 像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就, 需要耐下心来认真修炼。 同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉 应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV, 只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习 方式。本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数 据结构以及用法。 此外,如您发现有错误之处,欢迎来信指正。 于仕琪 深圳大学 插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的 研究生。欲了解详情可以访问深圳大学招生网 http://zsb.szu.edu.cn/ 或者 给我发 email。 2
目录 第 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 3
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 4
第1章 预备知识 OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计 算机视觉理论知识外,还需要具有一定的编程能力。本书作者通过对 OpenCV 中 文论坛中的大量问题观察,发现有很大比例的问题是因为用户对 C/C++语言不熟 练,导致出错,或出错后不知如何解决。如果对 C/C++语言不熟悉,那使用 OpenCV 时会满头雾水瞎摸索,费心费力。 在这一章中,将介绍一些编程的基本概念,让读者对编程的流程有一个基本 了解。这样在出现错误时,可以快速确定错误的类型,并知道该如何解决。 1.1 编程的流程 一个编程的基本流程包括编辑、编译和连接三大步骤。其流程图如图 1.1 所 示。 编辑 编辑 a.cpp b.cpp 编译 编译 a.obj b.obj opencv_core.lib 连接 main.exe 5
图 1.1 编程的基本流程 1.2 什么叫编辑 编辑(edit)代码即编写代码,是编程的第一步。你可以任意一个编辑器进 行代码的编写。你可以使用 Windows 自带的“记事本”来编写代码,也可以使用 Notepad++,或者 Visual Studio 提供的编辑器。 图 1.2 使用 Windows 自带的记事本编辑代码 虽然可以使用记事本软件编辑代码,但是记事本软件的功能非常有限。缺少 常用的语法高亮,自动缩进等功能。所以可以使用其他功能更丰富的编辑器,如 Notepad++(图 1.3)等。 图 1.3 使用 Notepad++软件编辑代码 1.3 什么叫编译 编译(compile)是将用某种编程语言(如 C++语言)写成的源代码,转换成 目标文件。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代 码在运行时使用的数据。编译器(compiler)是实现这一目的的软件。编译器有 很多,如在 Windows 下有微软公司的 cl.exe,在 Linux 下有 gcc 和 g++。在命令行 6
下使用 cl.exe 对 hello.cpp 源代码进行编译,如图 1.4 所示。编译后,将得到目标 文件 hello.obj,如图 1.5 所示。 图 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 对 hello.obj 进行连接 图 1.7 连接后,将新生成 hello.exe 可执行文件 1.5 什么叫运行 运行(run)较容易理解,我们在 Windows 资源管理器里用鼠标双击 exe 可 执行程序,可以使程序被载入 CPU 运行。我们也可以在命令行窗口中输入可执 7
行程序的文件名运行,如图 1.8 所示。 图 1.8 在命令行窗口中运行 hello.exe,可以看到程序打印到标准输出的结果。 1.6 Visual C++是什么 通过前面的介绍,可以看到一个编程的流程:编辑->编译->连接->运行。更 具体来说,完成这个流程需要你: 1. 打开记事本软件,编辑代码,并保存; 2. 在命令行下运行编译器,对代码进行编译,生成目标文件; 3. 在命令行下运行连接器,将目标文件连接起来,生成可执行程序; 4. 在命令行下,或 Windows 资源管理器中运行程序,验证程序的正确性。 如果你的项目只有一个源代码文件,完成上面四个步骤尚可接受。但是如果 你的项目包括几十个甚至几百个源文件,如无其他软件辅助,只用上面四个非常 基本的步骤进行编程开发,会让人抓狂。 集成开发环境(Integrated Development Environment,简称 IDE)可以帮助你 对项目进行管理。常用的 IDE 有微软公司的 Visual Studio,里面包含 Visual C++, Visual C#等,其他的还有 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 来生成可执行程序。如果你在调试状态下,还会去调用调试器 (debugger)。IDE 会提升程序开发的效率,特别是调试程序的效率。 8
分享到:
收藏