基于模板匹配的目标跟踪技术研究与实现毕业设计论文(编辑修改稿)内容摘要:

cvActionMethod()四种。 cvActionTarget()类型如 cvCreateImage(), cvNamedWindow()。 cvTarget()类型的非常常见,如 cvMat(), cvSize(), cvPoint()。 cvMethod()类型比较常用的是算法或某方法,如 cvDCT()离散余弦变换算法。 cvActionMethod()的类型如 cvFindContours()轮廓搜寻算法。 此外也有例外,如: DoubleClickedMouse()。 矩阵数据类型 结构如下: 南华大学计算机科学与技术学院毕业设计(论文) 8 CV_bit_depth(S|U|F)Cnumber_of_channels,其中 S 为符号整型, U为无符号整型, F 则为浮点型。 比如 : CV_16UC1 指的就是 16 位的无符号的整型的单通道矩阵; CV_64FC2 指的就是 64 位的浮点型的双通道矩阵。 图像数据类型 结构如下: IPL_DEPTH_bit_depth(S|U|F),其中 S 为符号整型, U 为无符号整型, F 为浮点型。 比如: IPL_DEPTH_16U 图像像素数据值得就是 16 位的无符号的整型。 OpenCV 的基本数据类型 基本数据类型 OpenCV 视觉库提供了多种基本数据类型。 如 CvPoint、 CvSize、 CvRect 和CvScalar。 而在以上提到的这些数据类型当中, CvPoint 这个数据类型最为简单。 CvPoint 是一个包含 了 int 整型成员 x、 y 的简单的结构体。 另一个数据类型与 CvPoint 非常相似,即为 CvSize 这个包含 int 型成员 width 和 height 的简单结构体。 CvRect 类型则是派生于 CvPoint 和 CvSize 类型的复合类型,包含 了 4 个数据成员: width 和 height、还有 x 和 y。 下一个 是 CvScalar , CvScalar 类型拥有着一个单独成员 val 和 4 个都为整型成员,其中的单独成员是一个指向着 4 个双精度的浮点数组成的数组的指针。 CvMat 数据结构 CvArr CvMat IplImage 图 CvArr、 CvMat 和 IplImage 之间派生关系 OpenCV 虽是用 C 语言实现的,但是它的结构还是遵循面向对象的思想设计。 如上图 , IplImage 由 CvMat 派生,而 CvArr 派生了 CvMat。 CvArr*是 一种独特结构。 而 CvMat 是 OpenCV 在运用过程中常用的矩阵。 IplImage 为 OpenCV 所 南华大学计算机科学与技术学院毕业设计(论文) 9 有的图像编码的基本结构。 CvMat 矩阵结构简单,由类型 (type)、行数据长度 (step)、宽度 (width)、高度 (height)和一个指向着数据的指针构成。 作为 OpenCV中的 重要的矩阵变换函数, CvMat 使用方法 是 CvMat* cvCreateMat ( int rows, int cols, int type )。 预定义类型的结构如下: CV_bit_depth (S|U|F)Cnumber_of_channels。 矩阵 的 元素 能够是 32 位 的 浮点型 的 数据 (CV_32FC1),或是无符号 8 位 的 三元组 整型 的 数据 (CV_8UC3), 异或 是无数其他类型元素。 一个 CvMat 元素 它 不一定 非得 是 一 个单一的数字。 在矩阵中可以 由 单一输入来表示多 个数 值,这样 的话 我们 就能够 在一个三原色 的 图像上描绘多重 的 色彩通道。 CvMat 结构: typedef struct CvMat { int type。 int step。 //类型,行数据长度 int* refcount。 //仅供内部使用 int hdr_refcount。 union { uchar* ptr。 short* s。 int* i。 float* fl。 double* db。 } data。 union { int rows。 int height。 //排、高度 }。 union { int cols。 int width。 //列、宽度 }。 } CvMat。 IpLImage 数据结构 OpenCV 中所有图像都采用了同一结构,事实上, IplImage 是借鉴了 Intel 公司 南华大学计算机科学与技术学院毕业设计(论文) 10 在早期公布的 IPP 图像处理开发包中对于相关结构的定义。 因为 OpenCV主要针对计算机视觉方面的处理, 所以, 在 这个 函数库中, IplImage结构 是 最 为关键 重要的结构体。 IplImage 结构 源自 Intel 的另一函数库 Intel Image Processing Library (IPL)。 IplImage 结构定义如下: typedef struct _IplImage { int nSize。 /* 大小 */ int ID。 /* 版本 */ int nChannels。 /* 通道 */ int alphaChannel。 int depth。 /* 像素的位深度 */ char colorModel[4]。 char channelSeq[4]。 int dataOrder。 int origin。 /*原点位置 */ int align。 /*行排列方式 */ int width。 /* 宽像素数 */ int height。 /* 高像素数 */ struct _IplROI * roi。 /* 图像感兴趣区域 */ struct _IplImage * maskROI。 /* NULL */ void * imageId。 /* NULL */ struct _IplTileInfo * tileInfo。 /* NULL */ int imageSize。 /* 数据大小 */ char * imageData。 /* 指向排列的图像数据 */ int widthStep。 /* 排列的图像行大小 */ int BorderMode[4]。 int BorderConst[4]。 char *imageDataOrigin。 } IplImage。 IplImage 是整个 OpenCV 函数库的基础,在定义该结构 变量 时 会 用到函数cvCreatImage。 OpenCV 图像 /视频处理流程 OpenCV 图像 处理流程 使用 OpenCV来处理 数字 图像 其流程包括 如图 所示的 四个基本 过程:( 1) 加 南华大学计算机科学与技术学院毕业设计(论文) 11 载需要处理的图像 , 这可以使用函数 cvLoadImage 实现 ;( 2)使用 图像处理算法对图像进行处理 , OpenCV提供 了很多图像处理算法,比如边缘检测 、 图像 旋转等等 ,但有些算法需要自己编写 ; ( 3)对 图像处理的 结果 进行可视化显示或保存 ,可 使用cvShowImage 函数对处理 结果进行 显示和 使用 cvSaveImage 函数 将 结果 图像保存到相应位置;( 4) 卸载加载的图像 , 这可以用函数 cvReleaseImage 进行实现。 如下 的示例代码是使用 OpenCV 读取 保存在指定 位置 的图片,把它转化成灰度图像 后 对处理 结果 进行显示 和 保存。 从 这个实例我们可以 看出 :使用 OpenCV 可以 很简单的实现对图像 数据 的 读取 操作和显示保存操作。 图像加载图像处理结果显示 、 保存卸载图像cvLoadImage算 法cvShowImagecvSaveImagecvReleaseImage 图 OpenCV图像 处理基本流程 IplImage* colorImg = NULL。 //定义 IplImage 型变量 IplImage* grayImg = NULL。 colorImg = cvLoad(“D:\\”)。 //加载 图像 grayImg=cvCreateImage(cvGetSize(colorImg),colorImgdepth,1)。 //创建 灰度图像cvCvtColor(colorImg, grayImg, CV_RGB2GRAY)。 //转化为 灰度图像 cvNamedWindow (“处理结果 ”, 1)。 //定义 窗口用 于显示结果 cvShowImage(“处理 结果 ”, grayImg)。 //在 窗体 上 显示处理结果 cvSaveImge(“D:\\”, grayImg)。 //将 显示结果进行保存 南华大学计算机科学与技术学院毕业设计(论文) 12 cvReleaseImg(amp。 grayImg)。 //卸载 图像 OpenCV 视频 处理 流程 视频 是由一帧帧的图像构成的 ,对于视频 的处理可以转化成对于一系列图像的处理,一般可按如图 所示的 基本 过程来 实现 :( 1) 加载需要处理的 视频 文件 ,对于avi 视频 文件可使用函数 cvCaptureFromFile 来加载,如果要从摄像头实时捕获视频则要 用函数 cvCreateCameraCapture 来创建摄像头;( 2)使用 cvQueryFrame 从 前面已经创建的 Capture 中抓取一帧图像,如果抓取不成功则说明 视频 处理 完备, 此时要用函数 cvReleaseCapture 卸载 视频文件,否则对所抓取的图像进行 所 要求 的 处理 ; ( 3)对图像处理的 结果 进行可视化显示或保存 ,可 使用 cvShowImage 函数对处理 结果进行显示和 使用 cvSaveImage 函数将 结果 图像保存到相应位置 , 此外还可以使用cvWriteFrame 函数 把所有处理的 结果 保存成一个 AVI 视频文件;( 4) 卸载加载的图像 , 这可以用函数 cvReleaseImage 进行实现。 视频加载抓取图像结果显示 、 保存卸载图像图像处理抓取成功与否YNcvCaptureFromFilecvCreateCameraCapturecvQueryFramecvShowImagecvSaveImagecvWriteFramecvReleaseImage图像处理算法抓取成功与否YN视频处理结束卸载视频视频处理结束cvReleaseCapture 图 OpenCV视频处理基本流程 如下 的示例代码是使用 OpenCV 从摄像 头或者视频文件捕获视频流数据,把它转化成灰度图像 后 对处理 结果 进行显示 和 保存。 从 这个实例我们可以 看出 :使用 南华大学计算机科学与技术学院毕业设计(论文) 13 OpenCV可以 很简单的实现对 视频数据 的 读取 操作和显示保存操作。 CvCapture* pCapture = NULL。 //定义 cvCapture 结构 pCapture = cvCreateCameraCapture(0)。 //从 摄像头获取视频流 //pCapture = cvCaptureFromFile(“D:\\”)。 //从 AVI 视频文件获取视频流 IplImage* colorImg = NULL。 //定义 IplImage 型变量 IplImage* grayImg = NULL。 CvVideoWriter* pVideoWriter = NULL。 int N = 0。 while(1) { N++。 colorImg = cvQueryFrame(pCapture)。 //抓取 一帧图像 if(N==1) pVideoWriter =cvCreateVideoWriter(, CV_FOURCC(39。 X39。 , 39。 V39。 , 39。 I39。 , 39。 D39。 ), 25,cvSize(colorImgwidth,colorImgheight))。 if (colorImg。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。