摘要:本文旨在帮助读者快速入门OpenCV,而无需阅读冗长的参考手册。掌握了OpenCV的以下基础知识后,有需要的话再查阅相关的参考手册。目录[隐藏]1一、简介1.11、OpenCV的特点1.1.1(1)总体描述1.1.2(2)功能1.1.3(3)OpenCV模块1.22、有用的学习资源1.2.1(1)参考手册:1.2.2(2)网络资源:1.2.3(3)书籍:1.2.4(4)视频处理例程(在opencv-root/samples/c/):1.2.5(5)图像处理例程(在opencv-root/samples/c/):1.33、OpenCV命名规则1.3.1(1)函数名:1.3.2(2)矩阵数据类型:1.3.3(3)图像数据类型:1.3.4(4)头文件:1.44、编译建议1.4.1(1)Linux:1.4.2(2)Windows:1.55、C例程2二、GUI指令2.11、窗口管理2.1.1(1)创建和定位一个新窗口:2.1.2(2)载入图像:2.1.3(3)显示图像:2.1.4(4)关闭窗口:2.1.5(5)改变窗口大小:2.22、输入处理2.2.1(1)处理鼠标事件:2.2.2(2)处理键盘事件:2.2.3(3)处理滑动条事件:3三、OpenCV的基本数据结构3.11、图像数据结构3.1.1(1)IPL图像:3.22、矩阵与向量3.2.1(1)矩阵:3.2.2(2)一般矩阵:3.2.3(3)标量:3.33、其它结构类型3.3.1(1)点:3.3.2(2)矩形框大小(以像素为精度):3.3.3(3)矩形框的偏置和大小:4四、图像处理4.11、图像的内存分配与释放4.1.1(1)分配内存给一幅新图像:4.1.2(2)释放图像:4.1.3(3)复制图像:4.1.4(4)设置/获取感兴趣区域ROI:4.1.5(5)设置/获取感兴趣通道COI:4.22、图像读写4.2.1(1)从文件中读入图像:4.2.2(2)保存图像:4.33、访问图像像素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.44、图像转换4.4.1(1)字节型图像的灰度-彩色转换:4.4.2(2)彩色图像-灰度图像:4.4.3(3)不同彩色空间之间的转换:4.55、绘图指令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.11、矩阵的内存分配与释放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.22、访问矩阵元素5.2.1(1)假设需要访问一个2D浮点型矩阵的第(i,j)个单元.5.2.2(2)间接访问:5.2.3(3)直接访问(假设矩阵数据按4字节行对齐):5.2.4(4)直接访问(当数据的行对齐可能存在间隙时possiblealignmentgaps):5.2.5(5)对于初始化后的矩阵进行直接访问:5.33、矩阵/向量运算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.11、从视频流中捕捉一帧画面6.1.1(1)OpenCV支持从摄像头或视频文件(AVI格式)中捕捉帧画面.6.1.2(2)初始化一个摄像头捕捉器:6.1.3(3)初始化一个视频文件捕捉器:6.1.4(4)捕捉一帧画面:6.1.5(5)释放视频流捕捉器:6.22、获取/设置视频流信息6.2.1(1)获取视频流设备信息:6.2.2(2)获取帧图信息:6.2.3(3)设置从视频文件抓取的第一帧画面的位置:6.33、保存视频文件6.3.1(1)初始化视频编写器:6.3.2(2)保持视频文件:6.3.3(3)释放视频编写器:[编辑]一、简介[编辑]1、OpenCV的特点[编辑](1)总体描述OpenCV是一个基于C/C++语言的开源图像处理函数库其代码都经过优化,可用于实时处理图像具有良好的可移植性可以进行图像/视频载入、保存和采集的常规操作具有低级和高级的应用程序接口(API)提供了面向IntelIPP高效多媒体函数库的接口,可针对你使用的IntelCPU优化代码,提高程序性能(译注:OpenCV2.0版的代码已显着优化,无需IPP来提升性能,故2.0版不再提供IPP接口)[编辑](2)功能图像数据操作(内存分配与释放,图像复制、设定和转换)Imagedatamanipulation(allocation,release,copying,setting,conversion).图像/视频的输入输出(支持文件或摄像头的输入,图像/视频文件的输出)ImageandvideoI/O(fileandcamerabasedinput,image/videofileoutput).矩阵/向量数据操作及线性代数运算(矩阵乘积、矩阵方程求解、特征值、奇异值分解)Matrixandvectormanipulationandlinearalgebraroutines(products,solvers,eigenvalues,SVD).支持多种动态数据结构(链表、队列、数据集、树、图)Variousdynamicdatastructures(lists,queues,sets,trees,graphs).基本图像处理(去噪、边缘检测、角点检测、采样与插值、色彩变换、形态学处理、直方图、图像金字塔结构)Basicimageprocessing(filtering,edgedetection,cornerdetection,samplingandinterpolation,colorconversion,morphologicaloperations,histograms,imagepyramids).结构分析(连通域/分支、轮廓处理、距离转换、图像矩、模板匹配、霍夫变换、多项式逼近、曲线拟合、椭圆拟合、狄劳尼三角化)Structuralanalysis(connectedcomponents,contourprocessing,distancetransform,variousmoments,templatematching,Houghtransform,polygonalapproximation,linefitting,ellipsefitting,Delaunaytriangulation).摄像头定标(寻找和跟踪定标模式、参数定标、基本矩阵估计、单应矩阵估计、立体视觉匹配)Cameracalibration(findingandtrackingcalibrationpatterns,calibration,fundamentalmatrixestimation,homographyestimation,stereocorrespondence).运动分析(光流、动作分割、目标跟踪)Motionanalysis(opticalflow,motionsegmentation,tracking).目标识别(特征方法、HMM模型)Objectrecognition(eigen-methods,HMM).基本的GUI(显示图像/视频、键盘/鼠标操作、滑动条)BasicGUI(displayimage/video,keyboardandmousehandling,scroll-bars).图像标注(直线、曲线、多边形、文本标注)Imagelabeling(line,conic,polygon,textdrawing)(3)OpenCV模块cv–核心函数库cvaux–辅助函数库cxcore–数据结构与线性代数库highgui–GUI函数库ml–机器学习函数库[编辑]2、有用的学习资源[编辑](1)参考手册:opencv-root/docs/index.htm(译注:在你的OpenCV安装目录opencv-root内)(2)网络资源:官方网站:软件下载:(3)书籍:OpenSourceComputerVisionLibrarybyGaryR.Bradski,VadimPisarevsky,andJean-YvesBouguet,Springer,1sted.(June,2006).chenyusiyuan:补充以下书籍LearningOpenCV-ComputerVisionwiththeOpenCVLibrarybyGaryBradski&AdrianKaehler,O'ReillyMedia,1sted.(September,2008).OpenCV教程——基础篇作者:刘瑞祯于仕琪,北京航空航天大学出版社,出版日期:200706[编辑](4)视频处理例程(在opencv-root/samples/c/):颜色跟踪:camshiftdemo点跟踪:lkdemo动作分割:motempl边缘检测:laplace[编辑](5)图像处理例程(在opencv-root/samples/c/):边缘检测:edge图像分割:pyramid_segmentation形态学:morphology直方图:demhist距离变换:distrans椭圆拟合:fitellipse[编辑]3、OpenCV命名规则[编辑](1)函数名:cvActionTargetMod(...)Action=核心功能(corefunctionality)(e.g.set,create)Target=目标图像区域(targetimagearea)(e.g.contour,polygon)Mod=(可选的)调整语(optionalmodifiers)(e.g.argumenttype)[编辑](2)矩阵数据类型:CV_bit_depth(S|U|F)Cnumber_of_channelsS=符号整型U=无符号整型F=浮点型E.g.:CV_8UC1是指一个8位无符号整型单通道矩阵,CV_32FC2是指一个32位浮点型双通道矩阵.[编辑](3)图像数据类型:IPL_DEPTH_bit_depth(S|U|F)E.g.:IPL_DEPTH_8U图像像素数据是8位无符号整型.IPL_DEPTH_32F图像像素数据是32位浮点型.[编辑](4)头文件:#includecv.h#includecvaux.h#includehighgui.h#includeml.h#includecxcore.h//一般不需要,cv.h内已包含该头文件[编辑]4、编译建议[编辑](1)Linux:g++hello-world.cpp-ohello-world\-I/usr/local/include/opencv-L/usr/local/lib\-lm-lcv-lhighgui-lcvaux[编辑](2)Windows:在VisualStudio的‘选项’和‘项目’中设置好OpenCV相关文件的路径。[编辑]5、C例程////////////////////////////////////////////////////////////////////////////hello-world.cpp////该程序从文件中读入一幅图像,将之反色,然后显示出来.////