基于OpenCV的运动目标检测跟踪实验平台王力超,陈熙,陆起涌(复旦大学电子工程系,上海200433)摘要:运动目标的检测跟踪在机器人视觉、监控测量和视频压缩编码等等方面有着广泛的应用,是近年来的一个研究热点。本文设计了一个基于OpenCV软件的运动目标检测跟踪实验平台,对摄像头视野中的运动目标进行实时检测和跟踪,并留下编程和硬件接口,为利用运动目标跟踪而进行机器人视觉和基于计算机视觉的测量监控研究打下基础。关键词:目标跟踪;OpenCV;实验平台;编程接口中图分类号:TP391.41文献标识码:A1引言目前,数字图像处理在国民生产中起到日益重要的作用,对其的研究也日益广泛和深入。OpenCV程序库作为数字图像研究的软件助手,具有简单易用、功能强大、移植方便等优越性能。本实验设计了一个基于OpenCV的运动目标检测跟踪实验平台,对从摄像头采集来的图像数据进行实时的分析,从而实现对运动物体的检测与跟踪。本实验旨在引导学生了解OpenCV的性能,学习OpenCV的使用方法;尝试并逐渐熟悉图像处理,特别是运动目标跟踪方面的知识;以及进一步提高Windows操作系统下使用C语言和C++编程的能力。2OpenCV简介OpenCV是Intel开源计算机视觉库(OpenComputerVision)的简称。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV拥有包括300多个C函数的跨平台的中、高层API。它不依赖与其它的外部库,尽管也可以使用某些外部库。OpenCV具有以下特点:1.开放源码2.基于Intel处理器指令集开发的优化代码3.统一的结构和功能定义4.强大的图像和矩阵运算能力5.方便灵活的用户接口6.支持MS-Windows和Linux操作系统由于有了以上性能特点,OpenCV函数库功能强大,简单易用,移植也很方便,不失为学生和科研人员进行数字图像处理方面学习和研究的好工具。3运动物体的检测和跟踪数字图像处理中,运动物体的检测和跟踪在机器人视觉、监控测量和视频压缩编码等方面有着广泛的应用,是近年来的一个研究热点。随着研究的深入,应用于运动物体跟踪的算法也越来越多:从最简单的“帧差法”,到“背景消减法”到“模板匹配法”,到带有预测功能的“卡尔曼滤波”和“粒子滤波”等算法,都在不断地提高对运动目标检测和跟踪的准确性和高效性。本平台在进行运动物体检测跟踪时所采用的算法是:首先利用“帧差法”检测出初始的运动目标;一旦认为此目标合法,便根据目标在HSI(色调、饱和度、强度)空间中H通道的色调特性,利用“连续适应性均值移动算法(CamShift)”,对目标进行跟踪。CamShift算法简述如下:首先,在图像HSI空间中计算H通道(色彩通道)分量的1D直方图;接着,利用此1D直方图将原图改建成2D概率分布图;第三步,计算出目标区域的重心;第四部,利用经典的“MeanShift”算法,不断平移调整窗口中心到与目标重心重合;第五步,将上一帧的窗口大小和中心,作为下一帧MeanShift算法搜索窗口的初始值,在下一帧中继续MeanShift运算。计算H通道分量的1D直方图根据1D直方图建立2D概率分布图计算出目标区域的重心MeanShift算法将上一帧结果作为下一帧初始窗口上述运动物体检测和跟踪的算法运算图1.CamShift流程量小,跟踪效果好。只要初始抓取目标无误,并且在色彩空间上目标与背景有一定偏差,视频跟踪便能够达到相当的准确度。更好的一点是,此算法在跟踪同一场境内多个运动目标其中的一个时的效果,是其它同样计算复杂度的算法所难以比拟的。4Windows多线程编程为了达到良好的实时性能,充分利用CPU资源,本平台采用多线程并发处理模式进行编程。在Windows操作系统下,线程与进程调度都有着一套封装好的方法,各线程轮流占用CPU资源。既然没有多个CPU进行真正的程序“并发”执行,多线程编程要做的就是如何利用线程的“休眠”事件,合理充分地使用资源,以达到提高程序运行效率的目的。本平台中,程序由两个线程组成:main线程和GetImage线程。Main线程作为主线程,它启动了GetImage线程;除此之外main获取摄像头句柄是否有消息要求终止此线程?获取图像到缓存A锁住CPUA的数据存放到缓存B若事件队列里有多余“可以读图像”事件,则取掉一个发送“可以读图像”事件释放CPUN线程正常终止Y建立图像矩阵和显示图像的窗口启动GetImage线程等待GetImage发来的“可以读取图像”事件将图像从缓存B复制到缓存C,以备处理从图像的HSI空间中分离出H通道的分量,暂存帧差法检测运动物体是否满足要求的目标?获取跟踪目标窗体是否已获取1D直方图?获取1D直方图建立2D概率图利用CAMShift算法,跟踪获取目标更新跟踪窗口在图上标出目标显示图像获取用户输入YNYN线程的主要功能就是利用OpenCV函数库,对从摄像头获取的图像数据进行分析处理;此外main线程还负责获取用户输入信息。GetImage线程的主要工作就是循环地从摄像头读取数据放到缓存中,以供main线程分析。在这当中,GetImage线程往缓存中写数据与从缓存中读数据将不可避免地操作同一块缓存;为防止数据读写冲突出错,两线程在操作这块缓存时都必须上锁。这在本平台程序中是通过“互斥量”来实现的。另外,为防止main线程重复地分析同一帧图像,要求main线程必须等待GetImage线程的一个信号才能进行数据读取和分析,这在平台程序中是通过Wait/Object的方式来实现的。程序流程图如图2、图3所示。5实验结果经过实验证明,基于OpenCV的运动目标检测跟踪实验平台可以在实时显示图像的基础上,实时检测和跟踪运动目标,并且检测和跟踪具有较高的鲁棒性。在跟踪过程中,即时目标保持静止,程序也不会丢失对图2.GetImage线程图3.主线程目标的跟踪。检测跟踪结果如图4所示:上述稳定的目标检测与跟踪结果,是实现基于全地图路径规划的机器人算法的前提。实际上图4也正是一种基于此平台的视频智能吸尘器的软件工作界面。实践表明,OpenCV使得在PC机上的数字图像处理变得更加简单便捷、优化高效。平台实时性的要求,使得本实验对于引导学生学习和掌握OpenCV的性能和使用方法,让学生熟悉图像处理,特别是运动目标跟踪方面的知识,提高PC机Windows操作系统下的C++编程能力,能够起到相当大的作用。6展望本实验设计的基于OpenCV的目标检测、跟踪平台,由于其较低的计算复杂度和较高的鲁棒性,不仅可用于智能吸尘器的控制;也可用于其它基于全地图路径规划的机器人领域,比如:收割、搜救、测绘、探伤等等场合。因此本平台具有广泛的应用前景。参考文献:[1]HieuT.Nguyen,ArnoldW.M.Smeulders,FastOccludedObjectTrackingbyaRobustAppearanceFilter,2004IEEE.[2]冈萨雷斯,《数字图像处理》[M],电子工业出版社,2005,40~112.[3]GaryR.Bradski,MicrocomputerResearchLab,SantaClara,CA,IntelCorporation,ComputerVisionFaceTrackingForUseinaPerceptualUserInterface.[4]张春田,苏育挺,《数字图像压缩编码》[M],清华大学出版社,2006,20~23.[5]JefferyRichter,《Windows核心编程》[M],2000,121~287.[6]钱能.C++程序设计教程[M].清华大学出版社,1999,4,1~134.[7]opencv-doc-cn-0.9.7,OpenCV说明文档.APlatformforMovingObjectTrackingbasedonOpenCVWANGLi-chao,CHENXi,LUQi-yong(E.E.Department,FudanUniversity,Shanghai200433,China)Abstract:Asanactiveresearchareaintheseyears,movingobjectstrackingisbecomingmoreandmoreimportantinrobotvision,monitoring,measurementandcompressivecodingofvideos.AplatformformovingobjectstrackingbasedonOpenCVisdesigned,whichcouldperformrealtimemovingobjectsdetectingandtracking.Therearealsoprogrammingandhardwareinterfacesreserved,whichcanbeusedforfutureresearchofmonitoring,measurementorrobotintelligence.Keywords:Objecttracking;OpenCV;Experimentalplatform;Programinterface作者简介:王力超(1982—),男,江苏无锡人,硕士研究生,主要研究方向为计算机视觉、网络传输、嵌入式系统等。图4.检测跟踪结果