基于opencv的运动目标检测跟踪实验平台

基于opencv的运动目标检测跟踪实验平台

ID:26202285

大小:413.00 KB

页数:3页

时间:2018-11-25

基于opencv的运动目标检测跟踪实验平台_第1页
基于opencv的运动目标检测跟踪实验平台_第2页
基于opencv的运动目标检测跟踪实验平台_第3页
资源描述:

《基于opencv的运动目标检测跟踪实验平台》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于OpenCV的运动目标检测跟踪实验平台王力超,陈熙,陆起涌(复旦大学电子工程系,上海200433)摘要:运动目标的检测跟踪在机器人视觉、监控测量和视频压缩编码等等方面有着广泛的应用,是近年来的一个研究热点。本文设计了一个基于OpenCV软件的运动目标检测跟踪实验平台,对摄像头视野中的运动目标进行实时检测和跟踪,并留下编程和硬件接口,为利用运动目标跟踪而进行机器人视觉和基于计算机视觉的测量监控研究打下基础。关键词:目标跟踪;OpenCV;实验平台;编程接口中图分类号:TP391.41文献标识码:A1引言目前,数字图像处理在国民生产中起到日益重要的作用,对其的研究也日益广泛和深入。Op

2、enCV程序库作为数字图像研究的软件助手,具有简单易用、功能强大、移植方便等优越性能。本实验设计了一个基于OpenCV的运动目标检测跟踪实验平台,对从摄像头采集来的图像数据进行实时的分析,从而实现对运动物体的检测与跟踪。本实验旨在引导学生了解OpenCV的性能,学习OpenCV的使用方法;尝试并逐渐熟悉图像处理,特别是运动目标跟踪方面的知识;以及进一步提高Windows操作系统下使用C语言和C++编程的能力。2OpenCV简介OpenCV是Intel开源计算机视觉库(OpenComputerVision)的简称。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通

3、用算法。OpenCV拥有包括300多个C函数的跨平台的中、高层API。它不依赖与其它的外部库,尽管也可以使用某些外部库。OpenCV具有以下特点:1.开放源码2.基于Intel处理器指令集开发的优化代码3.统一的结构和功能定义4.强大的图像和矩阵运算能力5.方便灵活的用户接口6.支持MS-Windows和Linux操作系统由于有了以上性能特点,OpenCV函数库功能强大,简单易用,移植也很方便,不失为学生和科研人员进行数字图像处理方面学习和研究的好工具。3运动物体的检测和跟踪数字图像处理中,运动物体的检测和跟踪在机器人视觉、监控测量和视频压缩编码等方面有着广泛的应用,是近年来的一个研究

4、热点。随着研究的深入,应用于运动物体跟踪的算法也越来越多:从最简单的“帧差法”,到“背景消减法”到“模板匹配法”,到带有预测功能的“卡尔曼滤波”和“粒子滤波”等算法,都在不断地提高对运动目标检测和跟踪的准确性和高效性。本平台在进行运动物体检测跟踪时所采用的算法是:首先利用“帧差法”检测出初始的运动目标;一旦认为此目标合法,便根据目标在HSI(色调、饱和度、强度)空间中H通道的色调特性,利用“连续适应性均值移动算法(CamShift)”,对目标进行跟踪。CamShift算法简述如下:首先,在图像HSI空间中计算H通道(色彩通道)分量的1D直方图;接着,利用此1D直方图将原图改建成2D概率

5、分布图;第三步,计算出目标区域的重心;第四部,利用经典的“MeanShift”算法,不断平移调整窗口中心到与目标重心重合;第五步,将上一帧的窗口大小和中心,作为下一帧MeanShift算法搜索窗口的初始值,在下一帧中继续MeanShift运算。图1.CamShift流程上述运动物体检测和跟踪的算法运算量小,跟踪效果好。只要初始抓取目标无误,并且在色彩空间上目标与背景有一定偏差,视频跟踪便能够达到相当的准确度。更好的一点是,此算法在跟踪同一场境内多个运动目标其中的一个时的效果,是其它同样计算复杂度的算法所难以比拟的。4Windows多线程编程为了达到良好的实时性能,充分利用CPU资源,本

6、平台采用多线程并发处理模式进行编程。在Windows操作系统下,线程与进程调度都有着一套封装好的方法,各线程轮流占用CPU资源。既然没有多个CPU进行真正的程序“并发”执行,多线程编程要做的就是如何利用线程的“休眠”事件,合理充分地使用资源,以达到提高程序运行效率的目的。本平台中,程序由两个线程组成:main线程和GetImage线程。Main线程作为主线程,它启动了GetImage线程;除此之外main图2.GetImage线程图3.主线程线程的主要功能就是利用OpenCV函数库,对从摄像头获取的图像数据进行分析处理;此外main线程还负责获取用户输入信息。GetImage线程的主要

7、工作就是循环地从摄像头读取数据放到缓存中,以供main线程分析。在这当中,GetImage线程往缓存中写数据与从缓存中读数据将不可避免地操作同一块缓存;为防止数据读写冲突出错,两线程在操作这块缓存时都必须上锁。这在本平台程序中是通过“互斥量”来实现的。另外,为防止main线程重复地分析同一帧图像,要求main线程必须等待GetImage线程的一个信号才能进行数据读取和分析,这在平台程序中是通过Wait/Object的方式来实现的。程序流程图如图

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。