【VC++开源代码栏目提醒】:以下是网学会员为您推荐的VC++开源代码-基于开源计算机视觉库OpenCV的图像处理 - 计算机教材,希望本篇文章对您学习有所帮助。
第25卷第4期 计算机应用与软件Vol125No.42008年4月 ComputerApplicationsandSoftwareApr.2008收稿日期:2007-04-11。
国家自然科学基金项目50575211。
贾小军讲师主研领域:计算机视觉与数字图像处理。
基于
开源计算机视觉库OpenCV的图像处理贾小军1 喻擎苍21嘉兴学院信息工程学院 浙江嘉兴3140012浙江理工大学信息电子学院 浙江杭州310018摘 要 讨论了OpenCVOpenSourceComputerVisionLibrary相对于现有的计算机视觉软件包所具有的优势描述了OpenCV的环境配置、数据定义、图像元素访问方式。
OpenCV成为一种源码开放、包含丰富的高级数学计算函数、图像处理函数和计算机视觉函数、不断更新和平台无关性的计算机视觉软件包。
给出了两个实例表明了其部分特性。
关键词 计算机视觉 OpenCV 图像处理THEIMAGEPROCESSINGBASEDONOPENSOURCECOMPUTERVISIONLIBRARYJiaXiaojun1 YuQingcang21SchoolofInformationEngineeringJiaxingUniversityJiaxing314001ZhejiangChina2SchoolofElectricalandInformationZhejiangSci2TechUniversityHangzhou310018ZhejiangChinaAbstract TheadvantageofOpenCVovertheexistingcomputervisionlibraryisdiscussed.TheenvironmentconfigurationdatadefinitionandtheaccesstoimageelementofOpenCVaredescribed.OpenCVhasbecomeanopensourcecomputervisionsoftwarepackagewhichhasadvancedmathematicalcalculationfunctionimageprocessingfunctionandcomputervisionfunction.Itisofceaselessrenewalandisplatformindependent.TwoexamplesaredemonstratedandpartialfeaturesofOpenCVareindicated.Keywords Computervison OpenCV Imageprocessing0 引 言近年来以图形、图像、视频等大容量为特征的图像数据处理广泛应用于医学、交通、工业自动化等领域。
其最大特点是数据量大有时要求实时处理。
大多数图像处理软件包均用C/C来编写12。
这些软件包为图像分析和机器视觉处理提供了极大的便利但是却存在许多问题。
如:大多数软件包只能作低层图像处理无法实现诸如目标跟踪、摄像机标定、模式识别、三维重建、机器学习等高层处理许多软件包作为商业出售而无法普及。
OpenCV是Intel公司资助的
开源计算机视觉库与现有的计算机视觉库存相比具有不可比拟的优势:1由一系列C函数和少量C类构成包括300多个C/C函数支持中、高层API可以使用外部库也可以完全独立为IPP提供了透明接口对商业和非商业应用免费用户可以进行二次开发函数经过优化执行效率高2提供了丰富的图像及计算机视觉处理函数。
提供了数组、列表、队列、集合、树等基本数据结构包含了求矩阵积、特征值、奇异值、方程求解、特殊函数等众多高级数学计算函数基本的图像处理如滤波、边缘检测、形态操作等高级图像视觉操作功能如摄像机标定、运动分析、目标跟踪、模式识别、机器学习等等3良好的跨平台性。
支持Windows、Linux、Unix及MacOSX操作系统支持大多数C/C编译器如:MSVC6.0、MS2
VC.NET2003、MSVC.NET2005及CBuilderX简称BCB。
可以轻易在不同平台之间进行移植4更新速度快。
2006年11月发布了最新版本OpenCV_1.0.exe这是Intel推出的第一个正式版。
扩充了大量函数支持新编译器GCC4.X支持OpenMP增加了新的大型视频监控模块可以实现智能目标跟踪增加了ML机器学习类库扩展了对Python的绑定。
本文给出OpenCV在各种编译环境下的配置及其语法结构图像数据的存取方法最后给出两个实例。
1 OpenCV在几种编译器环境下的配置使用OpenCV必须正确地配置其应用环境。
不同的编译器配置方法略有不同。
下面给出了三种环境下的配置方法。
1.1 MSVC6.0环境下的配置在MSVC6.0环境下启动OpcnCV安装目录下的_make文件夹中的OpenCV.dsw工程用默认的Win32Debug模式Build工程将自动生成Lib及Dll文件如cvd.lib/highgyid.lib及cvd.dll/highguid.dll等将其拷贝到Lib目录下供以后使用。
要有效使用链接库还需在程序中加入对应的头文件如cv.h/highgui.h并且在工程中加入对应的链接文件及其它链接文件。
打开工程环境下的菜单Project选择Settings项。
在C/C 第4期 贾小军等:基于
开源计算机视觉库OpenCV的图像处理277 标签项中加入头文件所在的相对路径或绝对路径如…cvinclude在Link标签下加入Lib文件所在的路径及文件名多个文件间以空格分开如cvd.libhighguid.lib等通过InsertProjectintoWorkspace对话框加入OpenCV的现有工程如cv.dsp等即可应用OpenCV。
1.2 MSVC.NET2003及MSVC.NET2005环境下的配置 OpenCV在MSVC.NET2003及MSVC.NET2005环境下的配置几乎完全相同。
打开.NET应用环境选择菜单Tools中Options在打开的对话框中进行如下的设置:选择Projects中的VCDirectories在ListBox中添加库文件所在的路径、头文件所在的路径及源文件路径即可。
在工程中的Link添加所需要的库文件如cv.lib/cvd.lib等。
经过上述的配置可以在项目中使用OpenCV中的相关函数。
1.3 CBuilderX环境下的配置OpenCV的最新版本中取消了对CBuilderX的支持但是仍然有一个脚本文件位于utilsgen_make.py可以通过生成文件makefile.bccπs来编译实现。
这里介绍利用转换OpenCV静态库的方法实现其配置。
OpenCV的库在MSVC环境下可直接使用。
然而在BCB下必须进行转换否则无法使用。
首先需将OpenCV静态库文件进行转换。
利用BCB安装目录BIN中的文件coff2omf.exe进行转换。
还可以用另外两个工具impdef.exe或implib.exe进行转换。
其次在BCB下进行配置。
选择菜单Project中的Options在对话框中选择Directories/Conditionals标签在IncludePath中添加OpenCV的头文件所在的路径。
同时在LibraryPath中添加链接文件的路径。
最后在BCB工程中加入OpenCV的库文件。
启动ProjectManager选择ADD进行库文件添加。
虽然OpenCV在BCB下配置略嫌麻烦但是BCB具有最成熟的图形界面可视化、功能强大的应用组件VCL的开发环境对于有界面要求的图形开发者是个不错的选择。
2 OpenCV函数及数据表示方法OpenCV函数命名方式比较简单数据类型定义直观。
2.1 OpenCV函数命名方式通常OpenCV采用以下格式进行函数的命名:cvActionTargetModParameterscv在每个函数名前都存在Action表示函数的核心功能通常用一个英语动词表示如:SetCreateTarget表示目标图像区域如轮廓Contour多边形PolygonMod为可选项通常辅助说明操作的对象如操作类型Parameters表示参数列表不同的函数其参数个数及类型不完全相同。
2.2 矩阵数据表示方法OpenCV表示矩阵数据类型时通常采用如下的形式:CV_SUFCbit2depth表示数据长度可以取值8、16、32、64位S表示带符号整型数据U表示无符号整型数据F表示实数型数据number2of2channels表示数据通道数可以取值1234。
如:CV_8UC1表示无符号8位单通道数据类型CV_32FC2表示32位双通道实数型数据。
2.3 图像数据表示方法OpenCV表示图像数据类型时通常采用如下的形式:IPL_DEPTH_SUF如:IPL_EPTH_8U指8位无符号整型数据IPL_DEPTH_32F指32位实数型数据。
3 OpenCV数据结构及图像处理OpenCV提供了大量的动态数据结构如二维点、三维点结构列表、队列、集合、树、图、矩阵、视频、摄像机标定等数据结构。
针对图像数据提出了IplImage数据结构其各元素的含义及应用可以参考文献5。
OpenCV具有强大的图像处理功能。
正确处理图像取决于对图像元素的合理访问并且不同的访问方式其执行效率不同。
在实际应用过程中许多使用者在存取图像元素采用单一、固定的格式。
图像元素的存取具有较大的灵活性。
3.1 间接存取方式间接存取方式适用于各种类型的图像但是效率低下。
假设图像定义为IplImage3img。
不同类型的图像元素存取方式为:1对8位单通道图像像素Iij存取操作表示为:CvScalarscvGet2Dimgij//获取Iij像素值s.val0120cvSet2Dimgijs//设置Iij像素值2对8位3通道图像像素Iij存取操作表示为:CvScalarscvGet2Dimgij //获取Iij像素分别为Blue//分量s.val0Green分量s.val1Red分量s.val2s.val0120s.val1120s.val2120cvSet2Dimgijs//设置Iij像素值3.2 直接存取方式这是一种最常用的、高效率存取方式。
假设图像定义为IplImage3img不同类型的图像元素存取方式为:1对8位单通道图像像素Iij存取操作表示为:Iijuchar3img-imageDatai3img-widthStepj2对8位3通道图像像素Iij存取操作表示为:IijBuchar3img-imageDatai3img-widthStepj3img-nChannels0//Blue分量IijGuchar3img-imageDatai3img-widthStepj3img-nChannels1//Green分量IijRuchar3img-imageDatai3img-widthStepj3img-nChannels2//Red分量3.3 带指针直接存取方式存取方式简单高效。
假设图像定义为IplImage3img不同类型的图像元素存取方式为:1对8位单通道图像像素Iij存取操作表示为:intstepimg-widthStep/sizeofucharuchar3datauchar3img-imageDataIijdatai3stepj2对8位3通道图像像素Iij存取操作表示为:intstepimg-widthStep/sizeofucharintchannelsimg-nChannelsuchar3datauchar3img-imageDataIijBdatai3stepj3channels0//Blue分量IijGdatai3stepj3channels1//Green分量IijRdatai3stepj3channels2//Red分量 278 计算机应用与软件2008年4 应用实例以两个简单的实例说明OpenCV在图像处理方面的强大功能及其在图像处理中的应用。
两个实例均在BorlandCBuilder6.0环境下实现。
4.1 实例1利用OpenCV实现图像的边缘提取。
按照前面介绍的方法配置OpenCV应用环境同时在程序的前面加上头文件cv.h及highgui.h。
该例简单边缘检测可以调用函数cvCanny通过cv2LoadImage调入图像及cvShowImage显示处理结果。
原始的灰度图像及处理结果如图1所示。
图1 边缘检测实例4.2 实例2本例展示了在任意多边形中实现提取骨架/中轴线的方法。
提取骨架的方法主要有内切圆法、轮廓线法线相交法及delau2nay三角形法。
利用OpenCV提供的cvFindCountours函数寻找轮廓cvApproxPoly逼近多边形曲线同时使用了大量的OpenCV数据结构进行数据表示。
该例用OpenCV来实现简单及执行速度快。
原始图像及处理结果如图2所示。
图2 骨架提取实例5 结 论OpenCV充分利用C/C运行效率高的特点开发了大量的几乎遍及所有的图像及计算机视觉处理函数。
由于其
代码完全开放用户不但可以对源
代码进行修改加入新类而且可以通过查看函数内的源
代码来理解图像处理中很多经典算法的原理及实现过程这将对从事图像的工作者提供有益的帮助。
而且OpenCV操作方便不但可以作为应用程序的后台处理程序而且可以作为控制台程序进行操作。
它在图像处理及计算机视觉的各个领域中具有广阔的应用前景。
参考文献1YuQingcangChengHarryHChengWayneWetal.CHOpenCVforInteractiveOpenArchitectureComputerVisionJ.AdvancesinEngi2neeringSoftware2004359:5272536.2YuQingcangChengHarryHChengWayneWetal.InteractiveOpenArchitectureComputerVisionC.15thIEEEInternationalConferenceonToolswithArtificialIntelligenceICTAIπ03SacramentoCalifor2niaUSA112003:4062410.3黎松平西建丁益洪.开放源
代码的计算机视觉类库OpenCV的应用J.计算机应用与软件2005228:1342136.4吕学刚于明刘翠响.数字图像处理与计算机视觉编程的有力工具—IPL和OpenCVJ.现代计算机2002147:69271.5Intel○ROpenSourceComputerVisionLibrarReferenceManuals.2003.上接第247页图4 转变对最短距离的影响3 结 论以上是对GIS领域的最短路径计算所作的三方面的优化可以看到它在虚拟地图的模拟计算中取得了相当好的效果。
在实际使用中GIS的地图可以以统一的格式分布在不同地区的网上。
到不同的地区就到指定的网站去搜索地图信息并进行计算。
最短路径的计算还有从起点出发要经过几个送货点如何走最有效又如设计旅行的最短路线。
此外最短路径的计算除了平面以外还有在三维空间中的计算。
如消防员如何从底楼最快地到达大楼中的着火地点。
这些问题都是值得探讨的课题。
参考文献1夏宽理.算法基础.高等教育出版社2003.2CarATaylorGBrunsdonC.Ananalysisoftheperformanceofahier2archicalwayfindingcomputationalmodelusingsyntheticgraphsCom2puters.EnvironmentandUrbanSystems200125:69288.3TarantilisCDetal.Combinationofgeographicalinformationsystemandefficientroutingalgorithmsforreallifedistributionoperations.Eu2ropeanJournalofOperationalResearch2004152:4372453.4ChrisUpchurchetal.UsingGIStogeneratemutuallyexclusiveserviceareaslinkingtravelonandoffanetwork.JournalofTransportGeogra2phy200412:23233.5ZhongRenPengetal.Designanddevelopmentofinteractivetripplan2ningforweb2basedtransitinformationsystems.TransportationResearchPartC20008:4092425.