您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > OpenCV具有以下的特征
OpenCV简介OpenCV的特征OpenCV具有以下的特征:(1)开源计算机视觉采用C/C++编写。(2)使用目的是开发实时应用程序。(3)独立与操作系统、硬件和图形管理器。(4)具有通用的图象/视频载入、保存和获取模块。(5)具有底层和高层的应用开发包。OpenCV的功能应用OpenCV能够实现以下功能:(1)对图象数据的操作,包括分配、释放、复制和转换数据。(2)对图象和视频的输入输出,指文件和摄像头作为输入,图象和视频文件作为输出。(3)具有对距陈和向量的操作以及线性代数的算法程序,包括距阵、解方程、特征值以及奇异值。(4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作。(5)具有基本的数字图象处理能力,如可进行滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图象金字塔等操作。(6)可对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hongh变换、多边形逼近、直线拟合、椭圆拟合和Delaunay三角划分等。(7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应。(8)对运动的分析,如对光流、运动分割和跟踪的分析。(9)对目标的识别,可采用特征法和隐马尔科夫模型(HMM)法。(10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等。(11)可对图像进行标注,如对线、二次曲线和多边形进行标注,还可以书写文字(目前之支持中文)。OpenCV模块OpenCV包括以下几个模块,其具体功能是:(1)CV主要的OpenCV函数。(2)CVAUX辅助的(实验性)OpenCV函数。(3)CXCORE数据结构与线性代数支持。(4)HIGHGUI图像界面函数。(5)ML机器学习,包括模式分类和回归分析等。(6)CVCAM负责读取摄像头数据的模块(在以后版本中,当HIGHGUI模块中加入DirectShow支持后,此模块将被废除)。学习资源目前,OpenCV方面的资源已经很多,当然最简单的方法还是在网上搜索,比如在Google搜索引擎()中输入”OpenCV”即可进行相关查找,这里给出一些信息作为参考。(1)参考手册英文请打开文件opencv-root/docs/index.htm进行查询。中文请打开网页进行查阅。(2)网络资源官方网站网址是。中文官方网站网址是。软件下载网址是。(3)书籍请阅读北京航空航天大学出版社出版的《OpenCV教程》。OpenCV基础1.OpenCV命名规则2.基本数据结构3.矩阵的使用与操作4.图象的使用与操作5.数据结构与数据操作OpenCV命名规则1.函数命名规则通用函数名为cvActionTargetMod(…)其中,Action表示核心函数(比如:Set,Create);Target表示目标图像区域(比如:轮廓,多边形);Mod表示可选变种(比如:变量类型)。2.矩阵数据类型通用矩阵数据类型为CV_bit_depthS|U|P)Cnumber_of_channels其中,S表示带符号整数;U表示无符号整数;F表示浮点数。例如:CV_8UC1表示8位无符号单通道矩阵;CV_32FC2表示32位浮点数双通道矩阵。3.通用图像数据类型为IPL_DEPTH_bit_depth(S|U|F)其中,S,U,F的意义同矩阵数据类型。例如:IPL_DEPTH_8U表示8位无符号整数图像IPL_DEPTH_32F表示32位浮点数图像4.头文件OpenCV的头文件有如下几个:#includecv.h#includecvaux.h#includehighgui.h#includecxcore.h//不是必须的,它包含在cv.h中基本的数据结构1.图像结构2.矩阵的与向量结构3.其他的数据结构(1)点的表示(2)长方形维数的表示(3)有偏移量的长方形表示图像结构Opencv中的所有图像都采用同一个结构IplImage,该图像结构说明参考后面的PPT。实际上,IplImage是借鉴于Intel公司最早发布的IPP图像处理开发包中的定义;但由于IPP并非开源项目,因此对于OpenCV基本采用这个较复杂的图像结构,其版权方面的问题还有待研究。矩阵与向量结构矩阵与向量结构的和说明也可以参见后面的PPT。OpenCV采用一种独特的结构CvArr*。该结构是一个通用数组的表现形式,用做函数的参数,说明函数在调用该参数时接受多种类型的输入数据形式,比如IplImage*,CvMat*甚至CvSeq*。具体的数组形式在运行时应根据实际情况来分析。其他数据结构(1)点的表示:CvPointp=cvPoint(intx,inty);CvPoint2D32fp=cvPoint2D32f(floatx,floaty);CvPoint3D32fp=cvPoint3D32f(floatx,floaty,floatz);Eg:p.x=5.0p.y=5.0(2)长方形的维数表示:CvSizer=cvSize(intwidth,intheight);CvSize2D32fr=cvSize2D32f(floatwidth,floatheight);(3)有便移量的长方形表示Cvrectr=cvrect(intx,inty,intwidth,intheight);矩阵的使用和操作1.分配和释放矩阵OpenCV有一个矩阵操作的C语言的接口,另外也有一些C++语言的矩阵操作接口,通常C++语言接口更方便,且同样有效。在OpenCV中,向量是被当成是行或列为1的矩阵,并且矩阵在内存中的存储方式是按行存储,且每行按4字节对齐。(1)分配矩阵分配矩阵的原型为CvMat*cvCreateMat(introws,intcols,inttype);其中,type表示矩阵元素的类型,可以用如下形式表达CV_bit_depth(S|U|F)Cnumber_of_channelsEg:CvMat*M=cvCreateMar(4,4CV_32FC1);(2)释放矩阵释放矩阵的函数原型为VoidcvReleaseMat(CvMat**);Eg:CvMat*M=cvCreateMat(4,4,CV_32FC1);cvReleaseMat(&M);(3)复制矩阵复制矩阵的函数原型为CvMat*cvCloneMat(cvMat);Eg:CvMat*M1=cvCreateMat(4,4,CV_32FC1);CvMat*M2;M2=cvCloneMat(M1);(4)初始化矩阵可按如下方法初始化一个3行4列矩阵。Doublea[]={1,2,3,4,5,6,7,8,9,10,11,12};CvMatMa=cvMat(3,4,CV_64FC1,a);或者:CvMatMa;CvInitMatHeader(&Ma,3,4,CV_64FC1,a);(5)初始化单位矩阵可按如下方法初始化一个单位矩阵。CvMat*M=cvCreateMat(4,4,CV_32FC1);cvSetIdentity(M);访问矩阵元素(1)直接访问下例是对元素M(i,j)进行数据赋值和读取。cvmSet(M,I,j,2,0);//setM(i,j)t=cvmGet(M,i,j);//GetM(i,j)(2)已知对齐方式的直接访问下例是对32位对齐方式存储的元素进行赋值。CvMat*M=cvCreateMat(4,4CV_32FC1);intn=M-cots;float*data=M-data.fl;Data[i*n+j]=3.0;(3)未知对齐方式的直接访问下例是对某种对齐方式存储的元素进行赋值。CvMat*M=cvCreateMat(4,4CV_32FC1);intstep=M-step/sizeof(float);float*data=M-data.fl;(data+i*step)[i]=3.0;(4)直接访问一个已初始化的矩阵下例对已出吃化的矩阵a进行数据赋值。Doublea[16];CvMatMa=cvMat(3,4,CV_64FC1,a);A[i*4+j]=2.0;//Ma(i,j)=2.0;矩阵的向量操作对矩阵和向量的操作分以下几种类型。(1)矩阵与矩阵之间的操作此类型包括:CvMat*Ma,*Mb,*Mc;cvAdd(Ma,Mb,Mc);//Ma+Mb-MccvSub(Ma,Mb,Mc);//Ma-Mb-MccvMatMul(Ma,Mb,Mc);//Ma*Mb-Mc(2)矩阵元素之间的操作此类型包括:CvMat*Ma,*Mb,*Mc;cvMul(Ma,Mb,Mc);//Ma.*Mb-MccvDiv(Ma,Mb,Mc);//Ma./Mb-MccvAddS(Ma,cvScalar(-10.0),Mc);//Ma.-10-Mc(3)向量乘法操作此类型包括:doubleva[]={1,2,3};doublevb[]={0,0,1};doublevc[3];CvMatVa=cvMat(3,1,CV_64FC1,va);CvMatVb=cvMat(3,1,CV_64FC1,vb);CvMatVc=cvMat(3,1,CV_64FC1,vc);doubleres=cvDotProduct(&Va,&Vb);//dotproduct:Va.Vb-rescvCrossProduct(&Va,&Vb,&Vc);//crossproduct:Va*Vb-Vc注意VA,VbVc在叉积中必须是3个元素的向量。(4)单个矩阵的操作此类型包括:CvMat*Ma,*Mb;cvTranspose(Ma,Mb);CvScalart=cvTrace(Ma0;Doubled=cvDet(Ma);cvInvert(Ma,Mb);(5)非齐次线性系统求解操作此类型包括:CvMat*A=cvCreateMat(3,3,CV_32FC1);CvMat*x=cvCreateMat(3,3,CV_32FC1);CvMat*b=cvCreateMat(3,3,CV_32FC1);cvSolve(&A,&b,&x);(6)特征值分析(对称矩阵)操作此类型包括:CvMat*A=cvCreateMat(3,3,CV_32FC1);CvMat*E=cvCreateMat(3,3,CV_32FC1);CvMat*I=cvCreateMat(3,3,CV_32FC1);cvEigenVV(&A,&E,&I);(7)奇异值分解操作此类型包括:CvMat*A=cvCreateMat(3,3,CV_32FC1);CvMat*U=cvCreateMat(3,3,CV_32FC1);CvMat*D=cvCreateMat(3,3,CV_32FC1);CvMat*V=cvCreateMat(3,3,CV_32FC1);cvSVD(A,DU,V,CV_SVD_U_T|CV_SVD_V_T);图象的使用与操作1.分配和释放图象(1)分配一幅图象分配图象的函数原型为IplImage*cvCreateImage(CvSizesize,intdepth,intchannels);Eg1:IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);Eg2:IplImage*img2=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);(2)释放一幅图象释放图象的函数原型为VoidcvReleaseImage(IplImage**);Eg:IplImage*img=cvCr
本文标题:OpenCV具有以下的特征
链接地址:https://www.777doc.com/doc-5439115 .html