- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于OpenCV的运动目标检测跟踪实验平台
王力超,陈熙,陆起涌
(复旦大学电子工程系,上海 200433)
摘 要:运动目标的检测跟踪在机器人视觉、监控测量和视频压缩编码等等方面有着广泛的应用,是近年来的一个研究热点。本文设计了一个基于OpenCV软件的运动目标检测跟踪实验平台,对摄像头视野中的运动目标进行实时检测和跟踪,并留下编程和硬件接口,为利用运动目标跟踪而进行机器人视觉和基于计算机视觉的测量监控研究打下基础。
关键词:目标跟踪;OpenCV;实验平台;编程接口
中图分类号:TP391.41 文献标识码:A
1 引言
目前,数字图像处理在国民生产中起到日益重要的作用,对其的研究也日益广泛和深入。OpenCV程序库作为数字图像研究的软件助手,具有简单易用、功能强大、移植方便等优越性能。本实验设计了一个基于OpenCV的运动目标检测跟踪实验平台,对从摄像头采集来的图像数据进行实时的分析,从而实现对运动物体的检测与跟踪。本实验旨在引导学生了解OpenCV的性能,学习OpenCV的使用方法;尝试并逐渐熟悉图像处理,特别是运动目标跟踪方面的知识;以及进一步提高Windows操作系统下使用C语言和C++编程的能力。
2 OpenCV简介
OpenCV是Intel开源计算机视觉库(Open Computer Vision)的简称。它由一系列 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概率分布图;第三步,计算出目标区域的重心;第四部,利用经典的“Mean Shift”算法,不断平移调整窗口中心到与目标重心重合;第五步,将上一帧的窗口大小和中心,作为下一帧Mean Shift算法搜索窗口的初始值,在下一帧中继续Mean Shift运算。
图1.CamShift流程
图1.CamShift流程
4 Windows多线程编程
为了达到良好的实时性能,充分利用CPU资源,本平台采用多线程并发处理模式进行编程。在Windows操作系统下,线程与进程调度都有着一套封装好的方法,各线程轮流占用CPU资源。既然没有多个CPU进行真正的程序“并发”执行,多线程编程要做的就是如何利用线程的“休眠”事件,合理充分地使用资源,以达到提高程序运行效率的目的。
本平台中,程序由两个线程组成:main线程和GetImage线程。Main线程作为主线程,它启动了GetImage线程;除此之外main
图2.
图2.GetImage线程
图3.
图3.主线程
线程的主要功能就是利用OpenCV函数库,对从摄像头获取的图像数据进行分析处理;此外main线程还负责获取用户输入信息。GetImage线程的主要工作就是循环地从摄像头读取数据放到缓存中,以供main线程分析。在这当中,GetImage线程往缓存中写数据与从缓存中读数据将不可避免地操作同一块缓存;为防止数据读写冲突出错,两线程在操作这块缓存时都必须上锁。这在本平台程序中是通过“互斥量”来实现的。另外,为防止main线程重复地分析同一帧图像,要求main线程必须等待GetImage线程的一个信号才能进行数据读取和分析,这在平台程序中是通过Wait/Object的方式来实现的。
程序流程图如图2、图3所示。
5 实验结果
经过实验证明,基于OpenCV的运动目
您可能关注的文档
最近下载
- RS Components 电工电料 电动机启动器 3RK1903-0BA00 使用说明.pdf VIP
- 瑞幸咖啡企业的供应链战略.pptx VIP
- 尚爱空压机SM.00.00.01空缩机通用说明书(中文)分解.doc VIP
- 2025版结直肠癌CSCO诊疗指南更新版解读(全文).docx VIP
- 2025年版《普通高中课程标准》英语.docx VIP
- 固定收益证券全套教学课件.pptx
- DB51_T2151-2016_实验室安全管理指南_四川省.docx VIP
- 制冷系统节能减排解决方案lotus.pdf VIP
- 旅游委托协议书正式模版.pdf VIP
- 网络与信息安全管理员(信息安全管理员)模拟习题含参考答案.docx VIP
原创力文档


文档评论(0)