机器视觉-实验四报告-运动分析和检测
- 格式:doc
- 大小:329.00 KB
- 文档页数:21
第1篇一、实训背景与目的随着科技的飞速发展,机械视觉技术在工业自动化、机器人、安防监控等领域得到了广泛应用。
为了提高学生对机械视觉技术的理解与应用能力,本实训旨在通过理论学习和实践操作,使学生掌握机械视觉的基本原理、系统设计以及在实际工程中的应用。
二、实训内容1. 机械视觉基本原理- 光学成像原理- 数字图像处理基础- 图像识别与特征提取- 深度学习与机器学习在机械视觉中的应用2. 机械视觉系统设计- 系统架构设计- 摄像头选择与标定- 照明系统设计- 图像预处理与增强- 目标检测与跟踪3. 实践操作- 实验平台搭建- 软件编程与调试- 实验数据采集与分析- 实验结果验证与优化三、实训过程1. 理论学习- 通过课堂讲解、文献阅读等方式,系统学习机械视觉的基本原理、系统设计等相关知识。
- 掌握图像处理、模式识别、机器学习等基础理论。
2. 实验平台搭建- 选择合适的实验平台,如计算机视觉开发板、机器人等。
- 搭建实验环境,包括摄像头、光源、图像采集卡等硬件设备。
3. 软件编程与调试- 使用OpenCV、MATLAB等软件进行图像处理、特征提取等操作。
- 调试程序,确保程序运行稳定、准确。
4. 实验数据采集与分析- 设计实验方案,采集实验数据。
- 对采集到的数据进行预处理、增强、特征提取等操作。
- 分析实验结果,验证实验方案的有效性。
5. 实验结果验证与优化- 根据实验结果,对实验方案进行优化。
- 比较不同算法的性能,选择最优方案。
四、实训成果1. 理论知识掌握- 学生掌握了机械视觉的基本原理、系统设计等相关知识。
- 掌握了图像处理、模式识别、机器学习等基础理论。
2. 实践操作能力- 学生能够独立搭建实验平台,进行软件编程与调试。
- 能够对实验数据进行采集、处理和分析。
3. 创新能力- 学生在实验过程中,提出了多种优化方案,提高了实验效果。
- 结合实际应用,设计了具有创新性的实验方案。
五、实训总结1. 实训收获- 通过本次实训,学生对机械视觉技术有了更深入的理解,提高了实践操作能力。
研究生课程论文机器视觉应用实验报告《机器视觉应用实验报告》姓名学号院系专业仪器仪表工程指导教师华南理工大学实验报告课程名称:机器视觉应用机械与汽车工程学院系仪器仪表工程专业姓名廖帆实验名称机器视觉应用实验日期指导老师一、实验目的自行搭建机器视觉测量系统,采集标定板、工件图像,利用图像处理软件进行标定、工件尺寸测量、工件缺陷检测。
主要目的有:1、根据被测工件,搭建机器视觉测量系统,选择成像系统软件,进行图像采集等实验。
掌握常规机器视觉测量原理、实验平台搭建、图像采集步骤;2、掌握成像系统软件常用操作,能够对图像进行简单处理,并编写简单相关程序尺寸测量、缺陷检测判定;3、对测量结果进行误差分析,进一步加深理解机器视觉测量过程中的关键因素。
二、实验原理机器视觉主要是利用机器实现代替人眼来做测量和判断等目的,因此机器视觉可以看作是使用计算机及相关设备对生物视觉的一种模拟。
该实验就是通过对选取的工件进行图像采集和图像分析处理以获得所需物体的尺寸、缺陷等信息,一个典型的机器视觉系统包括:相机(包括COMS相机和CCD相机)、光源、镜头、图像获取单元(图像采集卡等)、显示器、图像处理软件、通讯设备、输入输出单元等。
本次实验借助HALCON机器视觉软件,它是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境,在欧洲以及日本的工业界已经是公认具有最佳效能的MachineVision软件。
它源自学术界,是一套图像处理库,由一千多个各自独立的函数,以及底层的数据管理核心构成。
其中包含了各类滤波、色彩分析以及几何、数学变换、形态学计算分析、校正、分类、辨识、形状搜索等等基本的几何以及图像计算功能。
HALCON支持Windows,Linux和MacOS X操作环境,函数库可以用C,C++,C#,Visual Basic 和Delphi等多种普通编程语言开发,为工业检测上提供了高速、高精度、强有力的方法。
一、实验目的1. 了解视觉运动的基本原理和概念。
2. 掌握视觉运动实验的基本方法和步骤。
3. 通过实验,验证视觉运动现象,提高对视觉运动现象的认识。
二、实验原理视觉运动是指物体在视觉空间中的位置变化引起的视觉印象。
当物体在视觉空间中运动时,人眼视网膜上的图像也会随之发生变化,从而产生视觉运动感觉。
视觉运动实验主要研究物体运动对视觉感觉的影响,以及视觉系统如何处理和解释这些信息。
三、实验材料1. 实验仪器:摄像机、投影仪、电脑、视频采集卡等。
2. 实验对象:选择具有一定运动特性的物体,如小球、跑动的动物等。
3. 实验软件:图像处理软件(如MATLAB、Python等)。
四、实验步骤1. 实验准备(1)搭建实验平台,连接摄像机、投影仪、电脑和视频采集卡。
(2)调试设备,确保实验过程中图像稳定、清晰。
(3)编写实验程序,实现对物体运动数据的采集和处理。
2. 实验过程(1)将实验对象放置在摄像机拍摄范围内,确保实验对象在运动过程中始终处于摄像机视野内。
(2)启动实验程序,开始采集物体运动数据。
(3)观察实验现象,记录实验数据。
3. 实验数据分析(1)对采集到的物体运动数据进行处理,提取物体运动轨迹。
(2)分析物体运动轨迹,研究物体运动对视觉感觉的影响。
(3)比较不同运动条件下,视觉感觉的差异。
4. 实验结果与分析(1)在实验过程中,观察到的物体运动现象与理论相符。
(2)通过数据分析,发现物体运动速度、方向和轨迹对视觉感觉有显著影响。
(3)实验结果表明,视觉系统在处理物体运动信息时,具有一定的适应性和鲁棒性。
五、实验结论1. 视觉运动实验验证了物体运动对视觉感觉的影响,进一步加深了对视觉运动现象的认识。
2. 实验结果表明,视觉系统在处理物体运动信息时,具有一定的适应性和鲁棒性。
3. 通过本次实验,掌握了视觉运动实验的基本方法和步骤,为后续相关研究奠定了基础。
六、实验心得1. 视觉运动实验是一项较为复杂的实验,需要熟练掌握实验仪器和软件。
一、实习背景随着人工智能技术的飞速发展,机器视觉作为人工智能的一个重要分支,其在工业自动化、安防监控、医疗诊断等多个领域的应用日益广泛。
为了更好地了解和掌握机器视觉技术,提高自身的实践能力和创新能力,我于2023年7月至9月在XX科技有限公司进行了为期三个月的机器视觉实习。
二、实习单位简介XX科技有限公司是一家专注于机器视觉研发和应用的高新技术企业,拥有雄厚的研发实力和丰富的项目经验。
公司主要业务包括机器视觉系统集成、视觉检测设备研发、视觉算法开发等。
在实习期间,我有幸参与了多个实际项目,与团队成员共同完成了从需求分析、方案设计到系统调试的全过程。
三、实习内容1. 理论学习实习期间,我系统学习了机器视觉的相关理论知识,包括图像处理、特征提取、目标检测、跟踪、识别等。
通过阅读专业书籍、参加线上课程和与导师讨论,我对机器视觉有了更深入的理解。
2. 项目实践(1)工业产品缺陷检测项目该项目旨在利用机器视觉技术对工业产品进行缺陷检测,提高生产效率和产品质量。
在项目中,我负责编写检测算法,实现产品缺陷的自动识别和分类。
通过实验验证,该算法具有较高的准确率和实时性。
(2)人脸识别项目该项目旨在利用人脸识别技术实现人员身份验证。
在项目中,我参与了人脸检测、人脸特征提取和匹配算法的研究与实现。
通过实验验证,该系统能够准确识别和验证人员身份。
3. 团队协作与沟通在实习过程中,我与团队成员保持密切沟通,共同解决问题。
通过参与项目讨论、撰写技术文档和汇报工作进展,我提高了自己的团队协作和沟通能力。
四、实习收获1. 技术能力提升通过实习,我掌握了机器视觉的基本原理和方法,熟悉了相关软件和工具的使用,提高了自己的编程能力和算法设计能力。
2. 实践经验积累在实习过程中,我参与了多个实际项目,积累了丰富的实践经验,为今后的工作打下了坚实的基础。
3. 团队协作与沟通能力通过与团队成员的密切合作,我学会了如何与他人沟通、协调和解决问题,提高了自己的团队协作和沟通能力。
机器视觉实验报告
一、实验目的
本实验旨在探究机器视觉在图像识别和分析方面的应用,通过实际操作和数据分析,验证机器视觉技术的准确性和可行性。
二、实验装置与方法
1. 实验装置:使用具备机器视觉功能的摄像头和计算机软件。
2. 实验方法:
a. 首先,搜集一定数量的图像数据作为实验样本。
b. 接着,利用机器视觉软件对图像数据进行处理和分析。
c. 最后,对机器视觉技术的准确性和稳定性进行评估。
三、实验结果分析
通过实验数据的分析和比对,我们得出以下结论:
1. 机器视觉在图像识别方面具有较高的准确率,能够准确辨识不同物体和场景。
2. 机器视觉在图像分析方面具有较强的处理能力,能够提取图像特征和进行数据分析。
3. 机器视觉技术的稳定性较高,能够在复杂环境下正常工作并保持较高的准确性。
四、实验结论与展望
通过本次实验,我们验证了机器视觉技术在图像识别和分析方面的有效性和可靠性。
未来,随着技术的不断进步和应用领域的拓展,机器视觉将会在更多领域展示出其强大的功能和潜力,为人类生活和工作带来更多便利和效益。
以上为机器视觉实验报告的内容,希望能够对您有所帮助。
第1篇一、实验目的本次实验旨在通过实际操作,了解并掌握视觉机器的基本原理和应用,提高对视觉机器处理技术的认识。
实验内容包括边缘检测、显著性检测、特征点检测和直线检测等,通过对比不同算法的优缺点,分析其在实际图像处理中的应用和局限性。
二、实验内容与步骤1. 边缘检测(1)选择图像数据:选取一张包含明显边缘结构的图像作为实验对象。
(2)Sobel边缘检测:使用Sobel算子对图像进行边缘检测,记录结果。
(3)Canny边缘检测:使用Canny算子对图像进行边缘检测,记录结果。
(4)比较两种方法的边缘检测效果,分析其差异。
2. 显著性检测(1)选择图像数据:选取一张包含不同显著性区域的图像作为实验对象。
(2)HC显著性检测:使用Python和OpenCV实现HC显著性检测算法,调整参数,比较检测效果。
(3)基于最小方向对比度显著性检测:使用Python和OpenCV实现基于最小方向对比度显著性检测算法,调整参数,比较检测效果。
(4)基于最稳定区域显著性检测:使用Python和OpenCV实现基于最稳定区域显著性检测算法,调整参数,比较检测效果。
3. 特征点检测(1)选择图像数据:选取一张包含明显角点的图像作为实验对象。
(2)Harris角点检测:使用Python和OpenCV实现Harris角点检测算法,调整参数,比较检测效果。
(3)分析角点检测结果与实际图像特征之间的关系。
4. 直线检测(1)选择图像数据:选取一张包含直线的图像作为实验对象。
(2)哈夫变换直线检测:使用Python和OpenCV实现哈夫变换直线检测算法,调整参数,比较检测效果。
(3)对图像进行预处理(如边缘检测)以提高直线检测效果。
(4)分析哈夫变换在实际场景中的应用和局限性。
三、实验结果与分析1. 边缘检测通过对比Sobel算子和Canny算子的边缘检测结果,发现Canny算子具有更好的检测效果,能够有效抑制噪声,同时保留边缘信息。
TDCQ大学20 -20 学年第学期《机器视觉》课程综合实践报告完善封面信息,报告双面打印,左侧2钉装订,报告打印前去掉此蓝/红色字体专业:学号:姓名:成绩:20 年月日目录(报告完成后可自动更新目录,并去掉此页的蓝色/红色文字)1 绪论(一级标题三号黑体) (1)1.1 课程综合实践的意义 (2)1.2 文献综述 (2)2 图像预处理与视觉特征提取 (3)2.1 ×××方法 (3)2.1.1 ×××方法 (3)2.1.2 ×××方法测试验证 (3)2.2 小结 (4)3 摄像机标定 (4)3.1 摄像机标定的原理(二级标题小三黑体) (5)3.1.1 摄像机模型(三级标题,四号宋体加粗) (5)3.2 实验结果及分析 (5)3.2.1 仿真条件(三级标题,四号宋体加粗) (5)3.2.2 实验结果及结果分析(三级标题,四号宋体加粗) (5)3.3 小结 (5)4 立体视觉匹配 (6)5 运动分析 (6)6 综合实践及测试 (6)总结 (6)参考文献 (7)特别注意:本报告的模板后续章节是按照绪论、各章实践作业和以无人车为载体的综合实践为顺序设置的章节内容。
在具体实施时可以不局限于这个形式,可以以“无人车机器视觉系统综合实践”为主线,从概述、系统方案设计、理论方法及测试验证、实践平台集成与测试和结论。
但无论哪种形式,后续“特别注意”中的细节要求都是相同的。
这也是重点考察逻辑性、规范性、可读性的标准。
1 绪论(一级标题三号黑体)特别注意:在形成报告时,删除所有提示的文字,即文中蓝色和红色字体、图或字符,各级标题的字号和字体如下:一级标题三号黑体二级标题小三号黑体三级标题四号宋体加粗文内标题小四号宋体加粗特别注意:正文为小四号宋体(中文)+Time New Roman(英文)字体,1.5倍行距;段首行空2字符;标点符号必须用中文标点符号,而且标点符号要合理使用;文中首次出现的英文缩写需给出英文全称;引用的参考文献要顺序引用,不许跳引和漏引;排版时每一页的页面底端不能留空白,当底端有图放不下时可以调整图的大小使图和图题放下或将图放置在下一页的页首处。
机器视觉实验报告
《机器视觉实验报告》
近年来,随着人工智能技术的飞速发展,机器视觉作为人工智能的重要组成部分,正逐渐成为各行各业的研究热点。
机器视觉技术的应用范围涵盖了工业生产、医疗诊断、智能交通等多个领域,其在提高生产效率、降低成本、改善生
活质量等方面具有巨大的潜力。
为了更好地了解机器视觉技术在实际应用中的表现,我们进行了一项机器视觉
实验。
实验的主要内容是利用机器学习算法对一组图像进行分类识别,以验证
机器视觉在图像识别领域的准确性和稳定性。
首先,我们搜集了一批包含不同物体的图像样本,并对其进行预处理,包括图
像去噪、尺寸统一等操作,以确保图像数据的质量和一致性。
接着,我们利用
卷积神经网络(CNN)作为机器学习算法的模型,对图像样本进行训练和学习,以建立图像分类的模型。
在实验过程中,我们发现机器视觉技术在图像分类识别方面表现出了令人满意
的结果。
经过训练和学习后,机器学习算法能够准确地对图像进行分类,识别
出图像中的不同物体,并且在一定程度上具有抗干扰能力,对于光照、角度等
因素的影响较小。
此外,我们还对机器学习算法进行了一系列的对比实验和性能评估,结果显示,该算法在图像分类识别的准确率和速度方面均具有较高的表现,表明机器视觉
技术在图像识别领域具有广阔的应用前景。
总的来说,通过这次机器视觉实验,我们深刻认识到了机器视觉技术在图像识
别领域的巨大潜力和优势,相信随着技术的不断进步和应用场景的拓展,机器
视觉技术将为人类社会带来更多的便利和创新。
机器视觉的未来可期,我们将继续深入研究和探索,不断推动机器视觉技术的发展,为人类社会的进步贡献力量。
机器视觉测量实验报告
实验名称:机器视觉测量实验
实验组织:大学机械学院
实验时间:2024年6月5日
实验目的:本次实验旨在探究如何使用机器视觉技术来准确地测量物体的尺寸及形状。
实验步骤:
1、实验准备:首先在实验室准备机器视觉测量系统,包括一台摄像机、一台显示器、一台运动控制器和一台定位台,实验参数的设置,比如检测区域、检测方法、测量时间等;
2、样本准备:用于测量的物体以及所需要的校准器;
3、编写程序:编写测量程序,根据实验参数设置检测区域以及检测方法;
4、测试:运行测试程序,输出测量数据,并分析显示结果;
5、数据分析:将测量结果进行评价和分析,结果说明机器视觉技术对准确测量物体尺寸及形状有较好的效果。
实验结果:本次实验测量的物体均是圆柱体,大部分尺寸充分符合要求,最大偏差仅在0.02毫米以内,表明机器视觉技术在这方面的准确性很好。
结论:本次实验证明,采用机器视觉技术进行物体尺寸及形状测量是一种可行的方法,机器视觉测量系统的测量精度可满足大部分应用需要。
建议:本次实验仅局限于圆柱体测量。
机器视觉实验报告目录一实验名称 (2)二试验设备 (2)三实验目的 (2)四实验内容及工作原理 (2)(一)kinect for windows (2)(二)手持式自定位三维激光扫描仪 (3)(三)柔性三坐标测量仪 (9)(四)双面结构光 (10)总结与展望 (14)参考文献 (16)《机器视觉》实验报告一、实验名称对kinect for windows、三维激光扫描仪、柔性三坐标测量仪和双面结构光等设备结构功能的认识。
二、实验设备kinect for windows、三维激光扫描仪、柔性三坐标测量仪、双面结构光。
三、实验目的让同学们对机器视觉平时所使用的仪器设备以及机器视觉在实际运用中的具体实现过程有一定的了解。
熟悉各种设备的结构功能和操作方法,以便于进行二次开发。
其次,深化同学们对机器视觉系统的认识,拓宽同学们的知识面,以便于同学们后续的学习。
四、实验内容及工作原理(一)kinect for windows1.Kinect简介Kinectfor Xbox 360,简称Kinect,是由微软开发,应用于Xbox 360 主机的周边设备。
它让玩家不需要手持或踩踏控制器,而是使用语音指令或手势来操作Xbox360 的系统界面。
它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家“免控制器的游戏与娱乐体验”。
2012年2月1日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”。
2.硬件组成Kinect有三个镜头[1],如图1-1所示。
中间的镜头是RGB 彩色摄影机,用来采集彩色图像。
左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。
彩色摄像头最大支持1280*960分辨率成像,红外摄像头最大支持640*480成像。
Kinect还搭配了追焦技术,底座马达会随着对焦物体移动跟着转动。
实验四报告运动分析和检测一、实验目的采用帧间差分法和累积差图像法对运动物体进行运动分析,并将分析结果用:矢量场、运动矢量直方图和运动轨迹等三种运动表达法表示。
二、实验设备微机三、实验内容及步骤采用帧间差分法和累积差图像法对运动物体进行运动分析,并将分析结果用:矢量场、运动矢量直方图和运动轨迹等三种运动表达法表示。
实验原理见第7章ppt,实验图片自己网上下载1.上机编写程序。
2.调试程序。
3.根据实验结果,撰写实验报告。
四、实验报告1.源代码//下面的函数用以检测视频中运动的目标void CtraceDlg::OnBnClickedTracing(){IplImage* pFrame=NULL;//声明当前帧IplImage* pFrImg=NULL;//声明前景图像IplImage* pBkImg=NULL;//声明背景图像//声明对应的图像矩阵CvMat* pFrameMat=NULL;CvMat* pFrMat=NULL;CvMat* pBkMat=NULL;CvCapture* pCapture=NULL; //声明视频捕捉器,用以读取视频内容int nFrmNum=0;if(!(pCapture=cvCaptureFromFile(aviFilePath))){MessageBox(_T("请先打开视频文件"));return;}//create video windowscvNamedWindow("Video",1);cvNamedWindow("Background",1);cvNamedWindow("Foreground",1);cvMoveWindow("Video", 30, 0);cvMoveWindow("Background", 360, 0);cvMoveWindow("Foreground", 690, 0);//read every framewhile(pFrame=cvQueryFrame(pCapture)){nFrmNum++;if(nFrmNum==1){//存放背景图像(灰度)pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);//存放前景图像(灰度)pFrImg=cvCreateImage(cvSize(pFrame->width,pFrame->height),IPL_DEPTH_8U,1);//图像对应的矩阵都是一维的pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1); //将彩色图像转化为灰度图像cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);//将灰度图像存入矩阵,灰度图像是单通道的cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);cvConvert(pBackground, pBkMat);}else{cvCvtColor(pFrame,pFrImg,CV_BGR2GRAY);cvConvert(pFrImg,pFrameMat);//高斯滤波cvSmooth(pFrameMat,pFrameMat,CV_GAUSSIAN,3,0,0,0);//当前帧减去背景图像并取绝对值cvAbsDiff(pFrameMat,pBkMat,pFrMat);//二值化前景图像cvThreshold(pFrMat, pFrImg, 20, 255.0, CV_THRESH_BINARY); //形态学滤波,去噪cvErode(pFrImg, pFrImg, 0, 1);cvDilate(pFrImg, pFrImg, 0, 2);cvErode(pFrImg,pFrImg,0,1);//滑动平均更新背景(求平均)cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);//将背景矩阵转化为图像格式,用以显示cvConvert(pBkMat,pBkImg);//保持图像的旋转方向//pBkImg->origin=pFrImg->origin=pFrame->origin;//显示图像cvShowImage("Video",pFrame);cvShowImage("Background",pBackground);cvShowImage("Foreground",pFrImg);if(cvWaitKey(200)>=0)break;}}cvDestroyWindow("Video"); cvDestroyWindow("Background"); cvDestroyWindow("Foreground"); cvReleaseImage(&pFrImg); cvReleaseImage(&pBkImg); cvReleaseMat(&pFrameMat); cvReleaseMat(&pFrMat); cvReleaseMat(&pBkMat); cvReleaseCapture(&pCapture);}//下面的函数用来跟踪视频中的目标void CtraceDlg::OnBnClickedButton2(){CvCapture* pCapture=cvCaptureFromFile(aviFilePath);//视频捕捉器CvMat* foreImageMat=NULL;//前景矩阵CvMat* pBackgroundMat=NULL;CvMat* pMat=NULL;IplImage* pFrame=NULL,*pGray=NULL;pFrame=cvQueryFrame(pCapture);if(pFrame==NULL || pBackground==NULL){MessageBox(_T("请先打开视频文件并训练图像背景"));return;}int width=pFrame->width,height=pFrame->height;pBackgroundMat=cvCreateMat(height,width,CV_32FC1);pMat=cvCreateMat(height,width,CV_32FC1);foreImageMat=cvCreateMat(height,width,CV_32FC1);previousLabeledMat=cvCreateMat(height,width,CV_32FC1);//前帧标签矩阵currentLabeledMat=cvCreateMat(height,width,CV_32FC1);//当前帖标签矩阵pGray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);previousObjectSet=new movingObject();//前帧目标单链表currentObjectSet=new movingObject();//当前帧目标单链表cvCvtColor(pFrame,pGray,CV_BGR2GRAY);//将当前帧灰度化cvSmooth(pGray,pGray,CV_GAUSSIAN,3);//高斯滤波cvAbsDiff(pGray,pBackground,pGray);//与背景作差并求绝对值cvThreshold(pGray,pGray,20,255,CV_THRESH_BINARY);//对前景图像二值化cvErode(pGray,pGray,0,1);//腐蚀cvDilate(pGray,pGray,0,1);//膨胀cvConvert(pGray,foreImageMat);//将前景图像转换为矩阵computeObject(foreImageMat,width,height,previousLabeledMat,previous ObjectSet);//调用函数计算各目标movingObject*p=previousObjectSet->next,*q=NULL;//定义遍历目标单链表的临时指针objectList *t1=NULL,*t2=NULL;//定义遍历目标轨迹的临时指针char* data=pFrame->imageData;int step=pFrame->widthStep/sizeof(uchar);while(p!=NULL){data[(p->y)*step+(p->x)*3+1]=255;cvRectangle(pFrame,cvPoint(p->x-10,p->y-10),cvPoint(p->x+10,p->y+10),cvScalar(0,255,0),1,8,0);p=p->next;}cvNamedWindow("test",1); cvNamedWindow("frame",1);cvShowImage("test",pFrame);pFrame=cvQueryFrame(pCapture);float tmp_x,tmp_y;int tmp_label;while(pFrame!=NULL){cvCvtColor(pFrame,pGray,CV_BGR2GRAY);cvShowImage("frame",pFrame);cvConvert(pBackground,pBackgroundMat);cvSmooth(pGray,pGray,CV_GAUSSIAN,3);cvConvert(pGray,pMat);cvRunningAvg(pMat,pBackgroundMat,0.003,0);cvAbsDiff(pMat,pBackgroundMat,pMat);cvConvert(pMat,pGray);cvThreshold(pGray,pGray,20,255,CV_THRESH_BINARY);cvErode(pGray,pGray,0,1);cvDilate(pGray,pGray,0,2);cvErode(pGray,pGray,0,1);cvConvert(pGray,foreImageMat);computeObject(foreImageMat,width,height,currentLabeledMat,currentOb jectSet);//MessageBox(_T("success here"));q=currentObjectSet->next;data=pFrame->imageData;step=pFrame->widthStep/sizeof(uchar);while(q!=NULL){//处理每个目标的轨迹p=previousObjectSet->next;if(p!=NULL){tmp_x=sqrt(pow((float)( p->x-q->x),2)+pow((float)(p->y-q->y),2)); tmp_label=p->label;}p=p->next;while(p!=NULL){if( sqrt(pow((float)( p->x-q->x),2)+pow((float)(p->y-q->y),2))<tmp_x){tmp_x=sqrt(pow((float)( p->x-q->x),2)+pow((float)(p->y-q->y),2)); tmp_label=p->label;}p=p->next;}p=previousObjectSet->next;while(p!=NULL){if(p->label==tmp_label && abs(p->x-q->x)<100){q->head->next=p->head;p->head=NULL;break;}p=p->next;}t1=q->head;while(t1!=NULL){cvRectangle(pFrame,cvPoint(t1->x-1,t1->y-2),cvPoint(t1->x+1,t1->y+2),cvScalar(255,0,0),4,8,0);t1=t1->next;}//cvLine(pFrame,cvPoint(q->head->x,q->head->y),cvPoint(t1->x,t1->y),cvScalar(255,0,0),6,8,0);data[q->y*step+q->x*3+1]=255;int a=(int)sqrt((double)q->area);a=a/2;cvRectangle(pFrame,cvPoint(q->x-a,q->y-a),cvPoint(q->x+a,q->y+a),cvScalar(0,255,0),1,8,0);q=q->next;}cvShowImage("test",pFrame);if(cvWaitKey(200)>0)break;pFrame=cvQueryFrame(pCapture);//前帧的目标链表清除,再指向当前帧的目标链表p=previousObjectSet->next;while(p!=NULL){q=p; p=p->next;t1=q->head; q->head=NULL;while(t1!=NULL){t2=t1;t1=t1->next;delete t2;}delete q;}previousObjectSet->next=currentObjectSet->next; currentObjectSet->next=NULL;}cvWaitKey(0);cvReleaseCapture(&pCapture);cvReleaseMat(&previousLabeledMat); cvReleaseMat(¤tLabeledMat);cvReleaseImage(&pGray);cvDestroyWindow("test");p=previousObjectSet;while(p!=NULL){q=p; p=p->next;delete q;}p=currentObjectSet;while(p!=NULL){q=p;p=p->next;delete q;}}//对二值化的前景矩阵进连通分量标记,并返回一个结构数组。