《OpenCV3编程入门-毛星云》第一部分 快速上手OpenCV

平台:Win7 64bits + Visual Studio 2012 + OpenCV 2.4.10


接下来的很长一段时间我将沿着学习,记录整个学习过程和心得,既是自己的学习笔记,也为后来人提供一份参考资料。


由于我上半年研究了一段时间OpenCV,各种平台的安装使用都很熟练了,大家可以去看我前面的文章。主要是为了适配我们公司一个合作商的Android图像识别软件,于是把OpenCV往Android上移植,这里耗费了大量时间。另外还尝试过用OpenCV去做UVC录像,最终发现OpenCV擅长图像处理,不擅长视频处理,即使是专业视频处理开源库FFMPEG在Android上运行效果也不理想,所以用了AVILIB + H264LIB的方式录像,需要的童鞋可以去回溯我前面的文章。


好了,废话少说。没有安装开发环境的童鞋可以根据书本进行安装,我之前已经安装好了Win7 64bits + Visual Studio 2012 + OpenCV 2.4.10


童鞋们,打开书本!红色文字是我的注释

注意这本书有配套源码,如果有不懂的地方可以直接去下载源码,运行看效果!


目录

第一部分 快速上手OpenCV 1

第1章 邂逅OpenCV 3
1.1 OpenCV周边概念认知 4
1.1.1 图像处理、计算机视觉与OpenCV4
1.1.2 OpenCV概述 4

注意OpenCV是由Intel建立的。现在已经是个超级跨平台的项目,Linux、Windows、Mac OS、Android、 iOS、Maemo、FreeBSD、OpenBSD都可以。
1.1.3 起源及发展 5
1.1.4 应用概述 6

应用:人机交互、物体识别、图像分区、人脸识别、动作识别、运动跟踪、机器人
1.2 OpenCV基本架构分析 7

OpenCV2共19个组件
1.3 OpenCV3带来了什么 11
1.3.1 项目架构的改变 11
1.3.2 将OpenCV2代码升级到OpenCV3报错时的一些策略 12
1.4 OpenCV的下载、安装与配置 14
1.4.1 预准备:下载和安装集成开发环境 14
1.4.2 第一步:下载和安装OpenCVSDK 15

官网:http://opencv.org
1.4.3 第二步:配置环境变量 16
1.4.4 第三步:工程包含(include)目录的配置 17

特别注意这一节有一个“一劳永逸”的工程配置方法!
1.4.5 第四步:工程库(lib)目录的配置 21
1.4.6 第五步:链接库的配置 22

这一节中,下面这堆文字大家肯定用的上,嘿嘿:

opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_objdetect2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_stitching2410d.lib
opencv_ts2410d.lib

opencv_videostab2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_superres2410d.lib


opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.lib
opencv_objdetect2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_stitching2410.lib
opencv_ts2410.lib
opencv_videostab2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_superres2410.lib

1.4.7 第六步:在Windows文件夹下加入OpenCV动态链接库 25
1.4.8 第七步:最终测试 26
1.4.9 可能遇到的问题和解决方案27

问题5也许以后开发过程中会碰到!
1.5 快速上手OpenCV图像处理 28

学完下面4个例程,感觉自己棒棒哒!好厉害啊,我已经学会了图像处理了!
1.5.1 第一个程序:图像显示 29
1.5.2 第二个程序:图像腐蚀 30
1.5.3 第三个程序:图像模糊 31
1.5.4 第四个程序:canny边缘检测 32
1.6 OpenCV视频操作基础 34
1.6.1 读取并播放视频 34

体验下用OpenCV,只要3条语句就可以播放视频,预览摄像头,非常便捷!
1.6.2 调用摄像头采集图像 35
1.7 本章小结 38



第2章 启程前的认知准备 39

2.1 OpenCV官方例程引导与赏析 40

刚开始学习,不必去深究后面5个例子背后的原理,直接运行源码看看效果,感受下OpenCV的强大!彩色目标跟踪很有意思。
2.1.1 彩色目标跟踪:Camshift41
2.1.2 光流:opticalflow 42
2.1.3 点追踪:lkdemo 43
2.1.4 人脸识别:objectDetection43
2.1.5 支持向量机引导 44
2.2 开源的魅力:编译OpenCV源代码 45

初学者暂时没有必要去编译源代码,先学会用再说。
2.2.1 下载安装CMake 45
2.2.2 使用CMake生成OpenCV源代码工程的解决方案 46
2.2.3 编译OpenCV源代码 50
2.3 “opencv.hpp”头文件认知 53

后面的几个章节是C语言编程方面的知识,命名规范、main函数的参数argc/argv、printf函数用法,不知道的童鞋可以看下,知道的可以直接略过!
2.4 命名规范约定 54
2.5 argc与argv参数解惑 56
2.5.1 初识main函数中的argc和argv 56
2.5.2 argc、argv的具体含义 57
2.5.3 Visual Studio中main函数的几种写法说明 58
2.5.4 总结 59
2.6 格式输出函数printf()简析 59
2.6.1 格式输出:printf()函数 59
2.6.2 示例程序:printf函数的用法示例 60
2.7 智能显示当前使用的OpenCV版本 61
2.8 本章小结 61



第3章 HighGUI图形用户界面初步 63

3.1 图像的载入、显示和输出到文件 64
3.1.1 OpenCV的命名空间64

OpenCV程序标配:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

3.1.2 Mat类简析 64
3.1.3 图像的载入与显示概述 65
3.1.4 图像的载入:imread()函数 65

Mat imread(const string &filename, int flags = 1);

bmp jpeg png tif格式基本都支持

  • flags > 0 返回一个3通道的彩色图像,注意存储顺序为BGR(蓝绿红),而不是RGB
  • flags = 0 返回灰度图像
  • flags < 0 返回Alpha通道的加载图像

3.1.5 图像的显示:imshow()函数 66
3.1.6 关于InputArray类型 67
3.1.7 创建窗口:namedWindow()函数 67

void namedWindow(const string &winname, int flags = WINDOW_AUTOSIZE);

  • flags = WINDOW_NORMAL,用户可以改变窗口的大小
  • flags = WINDOW_AUTOSIZE,窗口根据图片大小自适应,并且用户不能手动改变窗口大小
  • flags = WINDOWS_OPENGL,支持OpenGL

3.1.8 输出图像到文件:imwrite()函数 68
3.1.9 综合示例程序:图像的载入、显示与输出 70
3.2 滑动条的创建和使用 73
3.2.1 创建滑动条:createTrackbar()函数 73

int createTrackBar(const string &trackbarname, const string &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0);

  • value,滑块创建时的初始值
  • count,滑块的最大位置值,最小值都是0
  • onChange,回调函数,每次滑块位置改变时,都会进行回调
  • userdata,用户传给回调函数的数据

3.2.2 获取当前轨迹条的位置:getTrackbarPos()函数 76
3.3 鼠标操作 76

void setMouseCallback(const string &winname, MouseCallback onMouse, void *userdata=0);

第二个参数,onMouse,窗口里每次鼠标事件发生后的回调函数。原型:void callback(int event, int x, int y, int flags, void *param),event是鼠标事件,x y是鼠标指针坐标值

3.4 本章小结 80

猜你喜欢

转载自blog.csdn.net/linqianbi/article/details/79166422
今日推荐