OpenCV简介报告人:XXX何为OpenCVOpenCV全称是:OpenSourceComputerVisionLibrary。OpenCV由Intel微处理器研究实验室的视觉交互组开发,是一种用于数字图像处理和计算机视觉的开源函数库,采用的开发语言是C++。何为OpenCVOpenCV中包含了300多种图像处理和计算机视觉方面的C/C++程序,其中包含大量的函数用来处理计算机视觉领域常见的问题,如:运动分析、目标跟踪、人脸识别、3D重建和目标识别等OpenCV自2000年发布以来,已经被下载50万次,吸引超过5000名会员注册加入何为OpenCV目前OpenCV包含如下几个部分:•cxcore:一些等基本函数(各种数据类型的基本运算)•cv:图像处理和计算机视觉功能(图像处理、机构分析、运算分析、物体跟踪、模式识别、摄像机定标)ml:机器学习模块,目前内容主要为分类器cvaux:一些实验性的函数(ViewMorphing、三维跟踪、PCA、HMM)Highgui:用户交互部分(GUI、图像I/O,系统调用函数)何为OpenCV另外还有cvcam,不过linux版本中已经被舍弃。Windows版本中将DirectX支持加入highgui后,cvcam将被彻底去掉。OpenCV显著特点跨平台:Windows,Linux,Android开源、免费,无论商业与否高效、快速、使用方便OpenCV模块结构【core】——核心功能模块,包含如下内容:•OpenCV基本数据结构•动态数据结构•绘图函数•数组操作相关函数•辅助功能与系统函数和宏•与OpenGL的互操作OpenCV模块结构【video】——视频分析组件,该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容【Videostab】——Videostabilization,视频稳定相关的组件,官方文档中没有多作介绍。OpenCV模块结构【calib3d】——其实就是就是Calibration(校准)加3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。【superres】——SuperResolution,超分辨率技术的相关功能模块OpenCV模块结构【contrib】——Contributed/ExperimentalStuf的缩写,该模块包含了一些最近添加的不太稳定的可选功能。2.4.8里的这个模块有新型人脸识别,立体匹配,人工视网膜模型等技术。【flann】——FastLibraryforApproximateNearestNeighbors,高维的近似近邻快速搜索算法库,包含两个部分:•快速近似最近邻搜索•聚类OpenCV模块结构【imgproc】——Image和Processing这两个单词的缩写组合。图像处理模块,这个模块包含了如下内容:•线性和非线性的图像滤波•图像的几何变换•其它(Miscellaneous)图像转换•直方图相关•结构分析和形状描述•运动分析和对象跟踪•特征检测•目标检测等内容OpenCV模块结构【features2d】——也就是Features2D,2D功能框架,包含如下内容:•特征检测和描述•特征检测器通用接口•描述符提取器通用接口•描述符匹配器通用接口•通用描述符匹配器通用接口•关键点绘制函数和匹配功能绘制函数OpenCV模块结构【highgui】——也就是highgui,高层GUI图形用户界面,包含媒体的I/O输入输出,视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容【nonfree】——也就是一些具有专利的算法模块,包含特征检测和GPU相关的内容。【gpu】——运用GPU加速的计算机视觉模块OpenCV模块结构【ml】——MachineLearning,机器学习模块,基本上是统计模型和分类算法,包含如下内容:•统计模型(StatisticalModels)•一般贝叶斯分类器(NormalBayesClassifier)•K-近邻(K-NearestNeighbors)•支持向量机(SupportVectorMachines)•决策树(DecisionTrees)•梯度提高树(GradientBoostedTrees)•随机树(RandomTrees)•超随机树(Extremelyrandomizedtrees)•期望最大化(ExpectationMaximization)•神经网络(NeuralNetworks)OpenCV模块结构【legacy】——一些已经废弃的代码库,保留下来作为向下兼容,包含如下相关的内容:•运动分析•期望最大化•直方图•平面细分(CAPI)•特征检测和描述(FeatureDetectionandDescription)•描述符提取器(DescriptorExtractors)的通用接口•通用描述符(GenericDescriptorMatchers)常用接口•匹配器OpenCV模块结构【objdetect】——目标检测模块,包含CascadeClassification(级联分类)和LatentSVM这两个部分。【ocl】——即OpenCL-acceleratedComputerVision,运用OpenCL加速的计算机视觉组件模块【photo】——也就是ComputationalPhotography,包含图像修复和图像去噪两部分OpenCV模块结构【stitching】——imagesstitching,图像拼接模块,包含如下部分:•拼接流水线•特点寻找和匹配图像•估计旋转•自动校准•图片歪斜•接缝估测•曝光补偿•图片混合OpenCV常用的数据结构OpenCV库使用“IplImage”结构体来创造和处理图像。因此IplImage也是函数库中最重要的结构体。IplImage结构来源于IPL函数库,使用这种格式的优点是可以比传统的常用格式DIB表示更多的图像性质,而且可以很方便的存取图像中的像素值。OpenCV常用的数据结构OpenCV库使用“IplImage”结构体来创造和处理图像。因此IplImage也是函数库中最重要的结构体。IplImage结构来源于IPL函数库,使用这种格式的优点是可以比传统的常用格式DIB表示更多的图像性质,而且可以很方便的存取图像中的像素值。IplImage结构体定义Typedefstruct_IplImage{intnSize;//IplImage结构的大小intID;//图像头的版本intChannels;intalphaChannel;//忽略intdepth;charcolorModel[4];charchannelSeq[4];//通道顺序IplImage结构体定义intdataOrder;//数据的排列方式intorigin;//坐标原点,0代表左上角,1代表左下角intalign;//忽略intwidth;intheight;struct_IplROI*roi;//指向ROI结构的指针,部位NULL时表示要处理的图像区域struct_IplImage*maskROI;//指定为NULLIplImage结构体定义void*imageId;//可忽略struct_IplTileInfo*tileInfo;//可忽略intimageSize;//图像大小char*imageData;//指向图像数据的指针intwidthStep;//校准后的行字节数intBorderModel[4];//可忽略intBorderConst[4];//可忽略char*imageDataOrigin;//指向完整的没有校准的图像IplImage结构体定义}IplImage;width和height这两个变量很重要,其次是depth和nchannals。depth变量的值取自ipl.h中定义的一组数据,但与在矩阵中看到的对应变量不同。因为在图像中,我们往往将深度和通道数分开处理,而在矩阵中,我们往往同时表示它们。IplImage结构体定义Example#includehighgui.hintmain(intargc,char**argv){IplImage*img=cvLoadImage(argv[1]);cvNamedWindow(Example1,CV_WINDOW_AUTOSIZE);//显示该图像cvShowImage(Example,img);cvWaitKey(0);cvReleaseImage(&img);//内存释放cvDestroyWindow(Example1);//关闭窗口}OpenCV常用函数LoadImage():图像载入函数语法:IplImage*cvLoadImage(constchar*filename,intiscolor=1);参数类型说明:Filenameconstchar*待载入图像的名称,包括图像的扩展名Iscolorint辅助参数项,可选正数、负数、零。正数表示强制作为三通道(彩色)图像载入,零表示该图像作为单通道(灰度)图像,负数表示载入图像的通道数由图像文件自身决定返回值:IplImage结构指针OpenCV常用函数NamedWindow():窗口定义函数语法:intcvNamedWindow(constchar*name,unsignedlongflags);参数类型说明:Nameconstchar*窗口名Flagsunsignedlong窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE共有1和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与原始尺寸相同,0表示以固定的尺寸显示图像返回值:无OpenCV常用函数WaitKey():按钮等待函数语法:intcvWaitKey(intdelay=0);参数类型说明:Delayint等待按键。如果delay=0,那么无限等待;否则等待delay毫秒这返回说明:在程序循环中,有时候由于程序一直处于计算中,导致窗口无法重绘(比如读出视频中的所有帧并显示),可以加入cvWaitKey函数,使程序等待几毫秒,让窗口完成重绘再执行其他操作。常用主流计算机视觉库MatlabvisDSKIPLOpenCVIPPOpenCV的定位Matlab:功能十分强大,正版软件价钱昂贵,适合用于学术研究、仿真和演示,如果在开发商品、工程应用方面应用有一定局限,需要MatcomOpenCV的定位visDSK:MICROSOFT图像处理库,免费、开源。OpenCV未出现时很受追捧,但是现在visDSK能做的OpenCV都可以做,在速度上,OpenCV还有Intel公司的优化支持。visDSK的时代已然成为过去。OpenCV的定位IPL:•IPL图象处理库,免费,起初开源,后来不开源•Intel的IPLimagelibrary虽然没有开源但是进行普通的图像处理非常好用,像拉布拉斯算子,索贝尔算子等等边缘提取和锐化的函数。如果目标平台是PC机或者工控机又是Intel的CPU,这是一个非常不错的选择。OpenCV的定位IPP:•IPP集成开发环境库(图象处理、信号处理等)收费源代码不公开OpenCV的定位OpenCV:•免费,源代码公开,是一个跨平台的中、高层API构成,它不依赖与其它的外部库,尽管也可以使用某些外部库。•为了完全独立于IPL(INTEL的图像处理库)OpenCV复制了IplImage和其它一些结构变量的声明。OpenCV的定位OpenCV:•OpenCV为Intel®IntegratedPerformancePrimitives(IPP)提供了透明的用户使用接口。这意味着它可以实时自动为某些特定的处理器加载IPP库。IPLDiagram2Diagram3底层,已经沦为IPP的真子集中高层,简化、应用化、开源、免费深化、不开源、收费Diagram2