OpenCV2 入门中文教材

所需积分/C币:17 2015-12-09 10:02:41 5.39MB PDF
收藏 收藏
举报

现目前OpenCV是最流行的免费数字图像处理库函数,但是市面上只有OpenCV1(C语言接口)的相关中文书籍,而这部教材是OpenCV2,具有C++接口,且是中文教材,非常适合用于入门。
目录 第1章预备知识 自业 1.1编程的流程. 12什么叫编辑 5566 13什么叫编译…… 14什么叫连接 7 15什么叫运行… 16 Visual c++是什么 17头文件 18库文件… 自自。自曲自自非 190 penCV是什么…… 11 110什么是命令行参数. 12 1.11常见编译错误. 13 1111找不到头文件. 13 1.11.2拼写错误… .14 1.12常见链接错误. 15 1.13运行时错误 t自 17 第2章 OpenCV介绍 19 21 OpenCV的来源 22 OpenCV的协议… .19 第3章图像的堪本操作. .21 31图像的表示 32Mat类 ∴23 33创建Mat对象. 24 331构造函数方法… 24 332 create()函数创建对象 25 33.3 Matlab风格的创建对象方法 26 3 34矩阵的基本元素表达 35像素值的读写.…27 351at(函数 .28 352使用迭代器… 29 353通过数据指针 ∴30 36选取图像局部区域 32 361单行或单列选择 2 362用 Range选择多行或多列.33 363感兴趣区域 33 364取对角线元素.34 37Mat表达式 34 38Mat类 36 39Mat类的内存管理 lBB。。自。自。。。。 38 3.10输出.. 曹自自自自 40 311Mat与 IplImage和 CyMat的转换…42 3111Mat转为|p|mage和 CyMat格式 42 3112 IplImage和 CyMat格式转为Mat .42 第4章数据获取与存储….24 41读写图像文件. 44 41.1读图像文件. 自。日。自。自。。自4非非非自自。。。自。。自自日 44 412写图像文件 .45 42读写视频… B。自 47 4.21读视频 47 42.2写视频 249 第1章预备知识 OpenCV是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计 算机视觉理论知识外,还需要具有一定的编程能力。本书作者通过对 OpenCV中 文论坛中的大量问题观察,发现有很大比例的问题是因为用户对CC++语言不熟 练,导致出错,或出错后不知如何解决。如果对C/++语言不熟悉,那使用 OpenCV 时会满头雾水瞎摸索,费心费力 在这一章中,将介绍一·些编程的基木概念,让读者对编程的流程有一个基木 了解。这样在岀现错误时,可以快速确定错误的类型,并知道该如何解决。 11编程的流程 一个编程的基本流程包括编辑、编译和连接三大步骤。其流程图如图1.1所 编辑 编辑 a cpp b. cpp 编译 编译 a obi b. obj opencv core. lib 连接 main. exe 5 图1.1编程的基本流程 12什么叫编辑 编辑(edit)代码即编写代码,是编程的第步。你可以任意一个编辑器进 行代码的编写。你可以使用 Windows自带的“记事本”来编写代码,也可以使用 Notepad++,或者Ⅵ /isual studio提供的编辑器。 hello.cpp-记郓本 文件)编辑)恪工息)查有吧)助 lude <stio. h retu"n 0 图1.2使用 Windows自带的记事本编辑代码 虽然可以使用记事本软件编辑代码,但是记事本软件的功能非常有限。缺少 常用的语法高亮,自动缩进等功能。所以可以使用其他功能更丰富的编辑器,如 Notepad++(图1.3)等。 d hello. cpp -+ 〕编扫〕搜幸〖)泗阳聖)式皿言〔)识置〕①:)满牛吧 111o 1 nclude <stdio. h> 2 int main( prinLI("Hello, Opencv!\n"); return O 6 lengtH In: 1 Col: L cl D&=lindow 图1.3使用 Notepad++软件编辑代码 13什么叫编译 编译( compile)是将用某种编程语言(如C+*语言)写成的源代码,转换成 日标文件。日标文件包含着机器代码(可直接被计算机中央处理器执行)以及代 码在运行吋使用的数据。编译器( compiler)是实现这目的的软件。编译器有 很多,如在 Windows下有微软公司的cexe,在 Linux下有gcc和g+。在命令行 下使用c,ee对helo.cpp源代码进行编译,如图1.4所示。编译后,将得到日标 文件hell.obj,如图1.5所示。 c:\source\chapter1 >c1. exe /c hello.cpp Microsoft (R)C/C++ optinizing Compiler Version 16.00.30319.01 forx64+ Copyright(C) Microsoft Corporation. Al1 rights reserved hello. cpp 图14在命令行下使用 clee对 hello. cp进行编译 2018/81010 C++ so yghello obj 12/8/1011 Objest File 图15编译后,将新生成 hello。b目标文件 什么叫连接 连接(link)是将多个目标文件,以及库文件生成可执行的文件(或静态库 或动态库)的过程。连接器( linker)是实现这一的的软件。常用的连接器有 Windows下的 link. exe, Linux下的ld等。 在 Windows下可以使用 link. exe将前面生成的hell。ob连接为可执行文件, 在命令行下效果如所图1.6小。连接后,将生成可执行文件,如图1.7所小。 \source\chapter1>link. exe hello.ob Microsoft(R)Incremental Linker Version 10.00. 30319.01 Copyright(C) Microsoft Corporation. All rights reserved 图16在命令行下使用 link. exe对 hello. obj进行连接 称 修改口期 型 h 1 5i 22]hello rh 01,/f/10 11 16 hert F 1 hi 图17连接后,将新生成 hello. exe可执行文件 15什么叫运行 运行(run)较容易理解,我们在 Windows资源管理器里用鼠标双击exe可 执行程序,可以使程序被载入CPU运行。我们也可以在命令行窗口中输入可执 行程序的文件名运行,如图18所示。 回管迎员,v15↑nlin「 and ProuD↑Cnn \source\chapterl >hello. exe Hello, OpenCU? c:\source\chapter1> 图1.8在命令行窗口中运行 hello, exe,可以看到程序打印到标准输出的结果。 16 Visual c++是什么 通过前面的介绍,可以看到一个编程的流程:编辑->编译->连接->运行。更 具体来说,完成这个流程需要你: 1.打开记事本软件,编辑代码,并保存 2.在命令行下运行编译器,对代码进行编译,生成目标文件; 3.在命令行下运行连接器,将目标文件连接起来,生成可执行程序; 4.在命令行下,或 Windows资源管理器中运行程序,验证程序的正确性 如果你的项目只有一个源代码文件,完成上面四个步骤尚可接受。但是如果 你的项目包括儿十个甚至儿百个源文件,如无其他软件辅助,只用上面四个非常 基本的步骤进行编程开发,会让人抓狂。 集成廾发环境( Integrated Development Environment,简称IDE)可以帮助你 对项目进行管理。常用的IDE有黴软公司的Ⅴ isual studio,里面包含 isual c++, Visual c#等,其他的还有 Eclipse、 Netbeans、 Delphi等。因此我们平时所说的vc 不是一种编程语言,也不是编译器,它只是一个|DE。 IDE一般包含编辑器。IDE自带的编辑器一般都针对编程语言进行了定制 实现语法高亮、自动缩进、自动补全等方使的功能。IDE还提供丰富的菜单和按 钮工具,如图19、图1.10和图1.11所示。 如果你太击DE中的“生成(buid)”按钮(图1.11),或者点击菜单“生成 ( build)”中的菜单项“生成项目( build project)”,那么DE会去调用编译器cexe 和连接器 link. exe来生成可执行程序。如果你在调试状态下,还会去调用调试器 ( debugger)。IDE会提升程序开发的效率,特别是调试程序的效率 Build Debug Team Data Icols Test window FElp 句·图·团品白鸥4··同 90|1等|国与A旧|距=2口如如限=幽尚 Sol-1tionhell 1 Bin- Tain I 口 aH Externs1D 国 stdafx c hell c-i stdaf 100%d 201E/81011:51 鹭"屠 图19微软 Visual stdio集成开发环境 家三兰|回马B 图1.10 Visual stdio中的编辑按钮 图1.11 Visual stdio中的生成程序按钮 7头文件 在编程过程中,程序代碼往往被拆成很多部分,每部分放在一个独立的源文 件中,而不是将所有的代码放在一个源文件中。考虑一个简单的小例了:程序中 有两个函数main()和foo()。man()函数位于 maIn. cpp,foo(函数位于 foo. cpp, main(:数中调用foo()函数。在编译阶段,由于编译是对单个文件进行编译,所 以编译main.cpρ吋,编译器不知道是否存在foo函数以及fo()调用是否正确, 因此需要头文件辅助。也就是说,在编译命令 cl. exe/c main cpp 运行时,编译器不知道foo的用法是否正确(因为foo在另一个文件 foo. cpp 中),只有借助头文件中的函数声明来判断。对 main cpp进行编译时,不会涉及 foo.cpp文件,只会涉及 maIn. cpp和foo.h(因为foo.h被 include)文件。头文件 的作用如图1.1所示。 2.函数声明是int foo(inti,intj),你的 调用看上去是对的 1.fo0-数 这样用对 foo h o main cpp int foo int i, int j); #ⅰ nclude"foo.h" int main( foo. cpp include foo, h int i=foo 3, 4) int foo int i, int i) return 图1.12对 main Cpp进行编译时,需要利用头文件中的fooO函数声明来确认 main CPp中 对foO的调用是正确的 18库文件 库文件中包含一系列的子程序。例如在上一节的例子中,foo.cpp源文件中 实现了foO函数,我们假设foo(函数是包含重要算法的函数,我们需要将foo() 函数提供给客户使用,但是不希望客户看到算法源代码。为了达到这一目的,我 们可以将foo.cpp编译程库文件(图1.13),库文件是二进制的,在库文件中是 看不到原始的源代码的。库和可执行文件的区别是,库不是独立程序,他们是向 其他程序提供服务的代码 当然使用库文件的好处不仅仅是对源代码进行保密,使用库文件还可以减少 重复编译的时间,増强程序的模块化。将库文件连接到程序中,有两种方式, 种是静态连接库,另一种是动态连接库。如果希望了解更多关于库文件的知识, 请查阅相关资料,再次不详细分析它们之问的异同。 10

...展开详情
试读 51P OpenCV2 入门中文教材
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    OpenCV2 入门中文教材 17积分/C币 立即下载
    1/51
    OpenCV2 入门中文教材第1页
    OpenCV2 入门中文教材第2页
    OpenCV2 入门中文教材第3页
    OpenCV2 入门中文教材第4页
    OpenCV2 入门中文教材第5页
    OpenCV2 入门中文教材第6页
    OpenCV2 入门中文教材第7页
    OpenCV2 入门中文教材第8页
    OpenCV2 入门中文教材第9页
    OpenCV2 入门中文教材第10页
    OpenCV2 入门中文教材第11页
    OpenCV2 入门中文教材第12页
    OpenCV2 入门中文教材第13页
    OpenCV2 入门中文教材第14页
    OpenCV2 入门中文教材第15页
    OpenCV2 入门中文教材第16页

    试读已结束,剩余35页未读...

    17积分/C币 立即下载 >