OpenCV学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章概述
OpenCV 是有Intel公司资助的开源计算机视觉库,它由一系列C函数和少量C++类构成,实现图像处理和计算机视觉方面的很多通用算法。
1、OpenCV的特征
(1)开源计算机视觉库采用C/C++编写
(2)使用目的是开发实时的应用程序
(3)独立于操作系统、硬件和图形管理器
(4)具有通用的图像/视频载入、保存和获取模块
(5)具有底层和高层的应用开发包
2、OpenCV的功能
(1)对图像数据的操作,包括分配、释放、复制、设置和转换数据
(2)对图像和视频的输入输出,指文件和摄像头作为输入,图像和视频文件作为输出(3)具有对矩阵和向量的操作及线性代数的算法程序,包括矩阵积、解方程、特征值以及奇异值
(4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作
(5)具有基本的数字图像处理能力,如可以进行滤波、边缘检测、角点检测、采样于差值、色彩转换、形态操作、直方图和图像金字塔等操作
(6)对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hough变换、多边行逼近、直线拟合、椭圆拟合、和Delaunay三角划分等
(7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应
(8)对运动的分析,如对光流、运动分割和跟踪的分析
(9)对目标的识别,如可采用特征法和隐马尔科夫模型(HMM)法
(10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等(11)课对图像标注,如对线,二次曲线和多边行进行标注
3.OpenCV模块
∙cv –核心函数库
∙cvaux –辅助函数库
∙cxcore –数据结构与线性代数库
∙highgui – GUI函数库
∙ml –机器学习函数库
第3章OpenCV基础
3.1 OpenCV命名规则
1、函数命名规则
通用函数名为cvActionTargetMod(……)
其中,Action 表示核心函数(如:set,create)
Target表示目标图像区域(如:轮廓,多边形)
Mod表示可选变种(如:变量类型)
2、矩阵数据类型
通用矩阵数据类型为CV_
其中,S表示带符号整数
U表示无符号整数
F表示浮点数
例如:CV_8UC1表示8位无符号单通道矩阵
3、图像数据类型
通用图像数据类型为IPL_DEPTH_
例如:IPL_DEPTH__8U表示无符号整数图像
4、头文件
#include
#include
#include
#include
3.2基本数据结构
1、图像结构
OpenCV中德所有图像采用同一个结构IplImage
2、矩阵与向量结构
OpenCV采用一种独特的结构CvArr*,该结构是一个通用数组的变现形式,用做函数的参数,说明函数在调用该函数时接受多种类型的输入数据形式。
3、其他数据结构
(1)点的表示
点的数据结构有以下三种:
CvPoint p=cvPoint(int x,int y)
CvPoint2D32f p=CvPoint2D32f(float x,float y)
CvPoint2D32f p=CvPoint2D32f(float x,float y,float z)
(2)长方形维数的表示
表示长方形维数的数据结构及用法
CvSize r=cvSize(int width,int height)
CvSizeD32f r=cvSize32f(float width,float height)
(3)有偏移量的长方形表示
CvRect r=cvRect(int x,int y,int width,int height)
3.3 矩阵的使用与操作
3.3.1 分配与释放矩阵
在OpenCV中,向量被当成行货列为1的矩阵,并且矩阵在内存中德存储方式是按行存储,且每行按4字节对齐。
(1)分配矩阵
分配矩阵的函数原型为:
CvMat* cvCreateMat(int rows,int cols,int type)
其中type表示矩阵元素的类型,可以用如下形式表达
CV_
(2)释放矩阵
释放矩阵的函数原型为void cvReleaseMat(CvMat**)
(3)复制矩阵
复制矩阵的函数原型
CvMat *cvCloneMat(CvMat*)
3.3.2 访问矩阵元素
若访问一个浮点数矩阵的第i行第j列元素,可采用以下几种方式
(1)直接访问M(i,j)
cvmSet(M,i,j,2.0)//SET M(i,j)
(2)已知对齐方式的直接访问
3.4 GUI命令
3.4.1 窗口管理
(1)创建及定位一个窗口
cvNamedWindow("wins",CV_WINDOW_AUTOSIZE)
cvMovewindow("win1",100,100)//偏移量从屏幕的左上角算起
(2)加载一副图像
具体事例
IplImage * image=0;
Img=cvLoadImage(fileName)
If(img)printf(“Could not load image file:%s \n”,filename);
(3)显示一副画像
具体操作语句实例为:cvShowImage("win1",img)
(4)关闭窗口