摘要: 本文旨在帮助读者快速入门OpenCV,而无需阅读冗长的参考手册。掌握了OpenCV的以下基础知识后,有需要的话再查阅相关的参考手册。
目录
[隐藏]
1 一、简介
1.1 1、OpenCV的特点
1.1.1 (1) 总体描述
1.1.2 (2) 功能
1.1.3 (3) OpenCV模块
1.2 2、有用的学习资源
1.2.1 (1) 参考手册:
1.2.2 (2) 网络资源:
1.2.3 (3) 书籍:
1.2.4 (4) 视频处理例程(在 /samples/c/):
1.2.5 (5) 图像处理例程 (在 /samples/c/):
1.3 3、OpenCV 命名规则
1.3.1 (1) 函数名:
1.3.2 (2) 矩阵数据类型:
1.3.3 (3) 图像数据类型:
1.3.4 (4) 头文件:
1.4 4、编译建议
1.4.1 (1) Linux:
1.4.2 (2) Windows:
1.5 5、C例程
2 二、GUI 指令
2.1 1、窗口管理
2.1.1 (1) 创建和定位一个新窗口:
2.1.2 (2) 载入图像:
2.1.3 (3) 显示图像:
2.1.4 (4) 关闭窗口:
2.1.5 (5) 改变窗口大小:
2.2 2、输入处理
2.2.1 (1) 处理鼠标事件:
2.2.2 (2) 处理键盘事件:
2.2.3 (3) 处理滑动条事件:
3 三、OpenCV的基本数据结构
3.1 1、图像数据结构
3.1.1 (1) IPL 图像:
3.2 2、矩阵与向量
3.2.1 (1) 矩阵:
3.2.2 (2) 一般矩阵:
3.2.3 (3) 标量:
3.3 3、其它结构类型
3.3.1 (1) 点:
3.3.2 (2) 矩形框大小(以像素为精度):
3.3.3 (3) 矩形框的偏置和大小:
4 四、图像处理
4.1 1、图像的内存分配与释放
4.1.1 (1) 分配内存给一幅新图像:
4.1.2 (2) 释放图像:
4.1.3 (3) 复制图像:
4.1.4 (4) 设置/获取感兴趣区域ROI:
4.1.5 (5) 设置/获取感兴趣通道COI:
4.2 2、图像读写
4.2.1 (1) 从文件中读入图像:
4.2.2 (2) 保存图像:
4.3 3、访问图像像素
4.3.1 (1) 假设你要访问第k通道、第i行、第j列的像素。
4.3.2 (2) 间接访问: (通用,但效率低,可访问任意格式的图像)
4.3.3 (3) 直接访问: (效率高,但容易出错)
4.3.4 (4) 基于指针的直接访问: (简单高效)
4.3.5 (5) 基于 c++ wrapper 的直接访问: (更简单高效)
4.4 4、图像转换
4.4.1 (1) 字节型图像的灰度-彩色转换:
4.4.2 (2) 彩色图像->灰度图像:
4.4.3 (3) 不同彩色空间之间的转换:
4.5 5、绘图指令
4.5.1 (1) 绘制矩形:
4.5.2 (2) 绘制圆形:
4.5.3 (3) 绘制线段:
4.5.4 (4) 绘制一组线段:
4.5.5 (5) 绘制一组填充颜色的多边形:
4.5.6 (6) 文本标注:
5 五、矩阵处理
5.1 1、矩阵的内存分配与释放
5.1.1 (1) 总体上:
5.1.2 (2) 为新矩阵分配内存:
5.1.3 (3) 释放矩阵内存:
5.1.4 (4) 复制矩阵:
5.1.5 (5) 初始化矩阵:
5.1.6 (6) 初始化矩阵为单位矩阵:
5.2 2、访问矩阵元素
5.2.1 (1) 假设需要访问一个2D浮点型矩阵的第(i, j)个单元.
5.2.2 (2) 间接访问:
5.2.3 (3) 直接访问(假设矩阵数据按4字节行对齐):
5.2.4 (4) 直接访问(当数据的行对齐可能存在间隙时 possible alignment gaps):
5.2.5 (5) 对于初始化后的矩阵进行直接访问:
5.3 3、矩阵/向量运算
5.3.1 (1) 矩阵之间的运算:
5.3.2 (2) 矩阵之间的元素级运算:
5.3.3 (3) 向量乘积:
5.3.4 (4) 单一矩阵的运算:
5.3.5 (5) 非齐次线性方程求解:
5.3.6 (6) 特征值与特征向量 (矩阵为方阵):
6 六、视频处理
6.1 1、从视频流中捕捉一帧画面
6.1.1 (1) OpenCV 支持从摄像头或视频文件(AVI格式)中捕捉帧画面.
6.1.2 (2) 初始化一个摄像头捕捉器:
6.1.3 (3) 初始化一个视频文件捕捉器:
6.1.4 (4) 捕捉一帧画面:
6.1.5 (5) 释放视频流捕捉器:
6.2 2、获取/设置视频流信息
6.2.1 (1) 获取视频流设备信息:
1