背景减除法

合集下载

智能交通系统中基于视频图像处理的车辆检测与跟踪方法综述

智能交通系统中基于视频图像处理的车辆检测与跟踪方法综述

智能交通系统中基于视频图像处理的车辆检测与跟踪方法综述一、概述随着科技的快速发展和城市化进程的推进,智能交通系统(ITS)已经成为现代交通领域的重要研究方向。

基于视频图像处理的车辆检测与跟踪方法是智能交通系统的重要组成部分,对于提高道路安全、优化交通流量、实现智能交通管理具有重要意义。

基于视频图像处理的车辆检测与跟踪方法主要利用计算机视觉和图像处理技术,对视频序列中的车辆进行自动检测、跟踪和识别。

这种方法可以实时获取道路交通信息,为交通管理和规划提供数据支持。

同时,通过车辆检测与跟踪,还可以实现车辆行为分析、交通事件检测等功能,为智能交通系统的进一步发展提供有力支持。

近年来,随着深度学习、机器学习等人工智能技术的快速发展,基于视频图像处理的车辆检测与跟踪方法也取得了显著的进步。

通过构建深度学习模型,可以实现对车辆目标的准确、快速检测,同时利用多目标跟踪算法,实现对多辆车辆的连续跟踪。

这些技术的发展为智能交通系统的车辆检测与跟踪提供了新的解决方案,也为未来的智能交通发展奠定了坚实的基础。

基于视频图像处理的车辆检测与跟踪方法仍然面临一些挑战,如复杂交通场景下的车辆遮挡、光照变化、动态背景干扰等问题。

未来研究需要不断探索新的算法和技术,提高车辆检测与跟踪的准确性和鲁棒性,以适应智能交通系统的发展需求。

本文将对基于视频图像处理的车辆检测与跟踪方法进行综述,介绍其基本原理、发展历程、现状以及未来的发展趋势。

通过总结现有方法的优点和不足,为未来的研究提供参考和借鉴。

同时,本文还将探讨当前面临的挑战和未来的研究方向,为智能交通系统的进一步发展提供有益的探索和启示。

1. 智能交通系统概述智能交通系统(Intelligent Traffic Systems,ITS)是信息技术、数据通信技术、传感器技术、电子控制技术以及计算机技术的综合应用,旨在构建一种大范围内、全方位发挥作用的实时、准确、高效的综合运输和管理系统。

基于OPENCV的背景减除方法

基于OPENCV的背景减除方法

基于OPENCV的背景减除方法tiunjaj生曹WWJM跚何奶礎疑1仕函鳏0»¥枷辭偷UxogoBess州} (ajnjdeo-iuj)|!to = isp ^6eiu||d|:0 = auej 厂iu)^6eiu||d| ajsq spoo jqpueqpueuiiuoo」noA ppv :0G01//} 0U!p6)pBguo::M^/\iiuoHE|dS!sA|euvuono|/yo ppAJ「鋼画稱砂醐期T 娜跚龜2那wm血轴卿绅前笛齢朝非型阪解絵■胸哥辟阁翔巨聊略綁罐猊宙'鳞讎副彳中¥ :離0械6£型囿乙&69:讥Z乙pgOOZ AOuadoAONBdO iWw o _u n o o -5E 39>2J2q n o p N -9z n op z 暑m nd。

m.S i s i s —^1=七cp %#誉Eo 匸 uyd/、(.(ALMDEO —)2E E J^AJ ANO AQNALUET —UQgej 「diuj!H MAaluBJ 「duQ)opow08u.sssne9seaoA 。

=o P O E I 6q•OPOW3S08A9m t=L.蕃矍一A ・m5w ^・・ c l §)(9um」「du4iw二” u-6yo八丄sp=L co ・(aluej「E o a z !S J 89A O )&E E a>_g 」o >。

H一童rudeo —}aiuej JAJano/voni s ^—duncvupdaieBGSta-Mode-(tmpIframes;闵二cvupdaieFGDSta-M0de-(tmplframe9bglmode_)=ku(doub_exVGefnckcoumoI=好T曲龍郭M Jnrbglmode-・voreground ・voriginubglmode.vbackground->origin u」;WCVErode<bglmodelvbackground9bglmodelvbackground);i fUCVErode<bglmodek>foregrounabg —mode-rvforeground);IprintK ・・%JfM sn.「・;i fcvShow 一magec4沖bglmodek>background)八cvcopwbglmodeyforegrounp-d s <?cvsmooih(dsL dsLCVIGAUSS_AN&);CVMOrphologyEX(dsL dsL p p;/. seuiimo am oas oj L削M aTHId^AO a团dai j t(0 0乙'looT JO|oo s((m6pq paj-jnoiuhui + A*pai7ino)u<x)—uiy(qip!M*par」no|uoo—iu + xioaj^jnoiuoo^uiJ^uiodAO 络joaj^jnoiuoo^ UJ X)oaT」noiU8一H UIOJAO()sp)a|6ue)ddyA3}(000S < ((Jnojuoo- iu)eaJVJno)uooA3)sqe|)j!(FL v mpiMioai-4nojuoo-UJ4q6pq)oaj""jno|uoo'" ui gg 03 < iq6i9q paj-jnojuoo-UJ . qipiMioajTinoiuoo"IU00t < q)P!M)39j7jno)uoo-ui + jqBpq pai^jnojuoo""UJ:(L 'jnojuoo- ui)pdH6uipunogA3 =|oaj~jno|uoo-ui 冶SZ'SSEO )gOH~AO =P9J~i0|OOJB|BOSAO:(9S 乙9 4SSZ )gOd"AO = JO|oo JqeosAO}(ixau~q<-jno)uoo~UJ = jnojuoo-UJ io=i Jnojuoo"ui! po| i((0l0)luiodAO RdlAIIS— OaddV"NIVHO~AO lSn~H13H~AO Vnoiuoo^odzis如0屮8一 $ 审如貯划4jsp )SJnOlUOQpUIJAO麻卿乃sjno)uoopuyAo// 4if^jno)uoo^ 幽沁群"cvDrawContours( dst, m_contour, color, color, -1, CV_FILLED, 8, cvPoint(0,0));cvShowlmageCW^m u, dst);// cvWaitKey(O);intk = cvWaitKey(1);if(k = q) break;cvReleaseBGStatModel( &bg_model);cvReleaseCapture(&m_capture); cvReleaselmage(&dst);if(m__storage) cvClearMemStorage(m_storage);cvDestroyWindow("背景图像');cvDestroyWindow("前景图像');return;。

FPGA实现移动目标检测

FPGA实现移动目标检测

FPGA实现移动⽬标检测 上⼀篇整理了⼈脸检测,这篇讲⼀下移动⽬标检测。

⽬前逐渐形成三种运动⽬标的检测算法: 1)帧间差分法是采⽤视频序列中的相邻两帧图像做差的⽅法,来检测视频序列中的移动⽬标。

但是受运动⽬标和背景变化的影响,检测过程中有可能出现伪⽬标或者⽬标中出现“空洞”,在⽬标运动不是太快时可以有效的检测到⽬标。

2)背景减除法⾸先在没有⽬标的场景中获取背景图像,然后利⽤实时视频序列和背景图像做差,来实现地移动⽬标的检测。

如何获得背景是背景减除法的关键。

3)光流法是通过给图像中每个像素点赋予⼀个速度⽮量的⽅法建⽴光流场,利⽤光流场中⽮量运动的连续性来检测移动⽬标。

该⽅法的计算量通常很⼤,难以实现实时性的检测。

其中帧差法⽐较简单,可操作性较强。

⼀、帧差法原理 帧差法是通过两帧相邻图像间做差,并选取合适的阈值对图像进⾏⼆值化,从⽽选取出运动的物体。

设 f(x,y)为灰度差分图像,g k(x,y)、g k-1(x,y) 为相邻的两帧灰度图像,D(x,y)为侦差图像,T为差分阈值。

1、缓存两帧灰度图像。

2、两帧灰度图像做差,将结果和设置的阈值进⾏⽐较后转⼆值化输出。

3、对⼆值化结果进⾏框选,确定移动⽬标,类似⼈脸检测。

本设计的难点是如何能缓存两帧图像,以 SDRAM 为例,常⽤的⽅法有两种:掩码法和⾮掩码法,下⾯分别介绍⼀下。

⼆、移动⽬标检测——掩码法1、结构框图 如图所⽰:摄像头采集数据后,再SDRAM通道0中缓存后输出到 VGA_driver,正常的摄像头显⽰⼯程到这就结束了。

⽽为了后续处理,我将 VGA_driver 的输出数据先不输出到VGA引脚,⽽是对其进⾏图像处理:先进⾏ RGB转YCbCr处理,得到 8bit 的灰度数据 Y 分量,然后将 Y 分量输⼊到 SDRAM的通道 1 中,利⽤ SDRAM 的掩码,通道 1 的读出数据包含了 2 帧的灰度数据,将这两帧数据进⾏帧差计算,然后进⾏⼀些图像处理。

背景减除法

背景减除法

背景消减法_OpenCV_详解一.基本概念背景消减法可以看作一种特殊的帧差法。

基本思想:利用当前帧图像与背景图像对应象素点的灰度差值来检测车辆。

如果当前图像的象素点和背景图像的象素点灰度值差别很大,就认为此象素点有车通过;相反,如果当前图像的象素点和背景图像的象素点灰度值差别较小,在一定的阈值范围内,我们就认为此象素点为背景象素点。

背景差值法假定图像背景是静止不变的,即图像背景不随图像帧数而变,可表示为b(x,y),定义图像序列为f(x,y,i),其中(x,y)为图像位置坐标,i为图像帧数,将每一帧图像的灰度值减去背景的灰度值可得到一个差值图像:id(x,y,i)=f(x,y,i)-b(x,y)背景差值法检测运动目标速度快,检测准确,易于实现,其关键是背景图像的获取与背景更新。

在实际应用中,静止背景是不易直接获得的,同时,由于背景图像的动态变化,需要通过视频序列的帧间信息来估计和恢复背景,即背景重建,所以要选择性的更新背景。

然而它对于动态场景的变化,例如光照的变化和阴影的干扰等特别敏感。

因此,选取一个可靠的背景模型进行背景的提取与动态更新以适应环境的变化是必要的。

使用背景差分法进行运动检测通常会遇到如下一些问题:(1)背景获取:最简单的方法是在场景中没有运动目标的情况下进行,但在现实中肯定是无法满足的,如高速公路和城市交通的监控,需要一种方法能在场景存在运动目标的情况下获得背景图像。

(2)背景的扰动:如树叶、树枝等各种东西的摇动(3)外界光照条件的变化(4)背景中固定对象的移动(5)背景的更新(6)阴影的影响背景消减法根据其背景模型的不同又可分为:直方图法、平均值法、单分布高斯背景模型、混合高斯分布背景模型、Kalman滤波器法,HMM模型法。

二.下面分享的是两种背景实现方式:(1)背景即为第一帧图像,简单的先看看程序的基本步骤和实现方法。

这种方法适用于第一帧即为全部背景,如果存在不是背景的物体,将出现误差;同时进行了简单的背景更新;(2)背景为前50帧的平均值,对于高速的车流量较少的地段,背景提取较理想,车辆缓慢移动时会在背景上留下痕迹。

一种新的基于统计的背景减除方法

一种新的基于统计的背景减除方法

2007,43(22)1引言视频图像中往往包含大量的信息,要存储和计算如此庞大的数据集合是很困难的事情。

况且真正有用的信息只是其中的很少部分。

减除无用的背景就可以大大减少数据量而不丢失有用信息。

背景减除包括背景建模、检测前景和背景更新三个方面。

背景建模即从一系列视频图像中准确找到属于背景的部分,并且存储为背景图像。

背景建模面临的困难主要是如何适应光照变化、摄像机抖动、背景中某些物体的高频运动(如树叶舞动和水波荡漾)、背景自身的变化(如本来属于背景的静止对象开始运动,甚至离开视线或运动对象停止在背景中不动等)[1]。

检测前景是将当前视频图像与背景模型进行比较,找到前景目标,减除背景。

这里的困难是差值定义和阈值设定的问题,即反映当前视频与背景差异的度量标准是什么,分类的阈值为多少。

背景更新就是某些变化导致原来的背景模型不再适合当前视频图像时,实时地更新背景模型。

背景更新的困难在于如何找到合适的更新策略,能够快速而真实的反映变化,即实时性和准确性的问题。

本文第2章用基于像素RGB值统计归类重建背景模型的方法构建初始的背景模型;第3章以颜色差异和亮度范围为依据,结合形态学处理进行背景减除;第4章提出两种背景更新的方法应对光照变化和物体增减导致的背景变化;第5章给出实验结果和讨论。

2背景建模2.1基本原理固定摄像机拍摄的视频序列,背景往往是最经常被看到的。

基于这一假设,参考灰度统计归类方法[2]对像素RGB值统计归类来建立背景模型。

即将样本序列中的各个像素的RGB值分别进行统计归类,出现频率最高的像素RGB值分别取其一种新的基于统计的背景减除方法孙吉花,刘肖琳SUNJi-hua,LIUXiao-lin国防科技大学机电工程与自动化学院自动化所333教研室,长沙410073333StaffRoomofAutomationInstitution,CollegeofMechatronicsEngineeringandAutomation,NationalUniversityofDefenseTechnology,Changsha410073,ChinaE-mail:sunjh81@yahoo.comSUNJi-hua,LIUXiao-lin.Newbackgroundsubtractionalgorithmbasedonstatistic.ComputerEngineeringandApplications,2007,43(22):73-75.Abstract:Aneweffectivebackgroundsubtractionalgorithmforcolorvideoisproposed.Firstgetsanimagesamplesequencefromacolorvideo.ThenanalyzesandclassifiestheRGBvalueperpixelofthesequenceandusestheaverageRGBvalueoftheclasswhichhasthehighestfrequencyinthesequencetoconstructthebackgroundmodel.Atlastsubtractsbackgroundaccordingtobothcolordistortionandbrightnessrange.Atthesametime,doessomemorphologicalworktoimprovetheresult.Experimentre-sultsindicatethatthisalgorithmcansolvetheproblemthatgrayvideobackgroundsubtractionalgorithmscan’tdetectthetargetswhichhavethesimilargrayintensitycomparedtobackground.Furthermore,itcanconstructbackgroundmodelfasterthanothercolorvideobackgroundsubtractionalgorithmsandallowspresenceofmovingobjectsinthesampleimages.Itimprovestheaccu-racyandreal-timeperformanceofbackgroundsubtractiontoacertainextent.Finallyproposessomeeffectivemethodstoupdatebackgroundmodelsoastoadapttheilluminationandbackgroundchanges.Keywords:backgroundmodel;backgroundsubtraction;backgroundupdate摘要:提出了一种有效的彩色视频背景减除的新方法。

背景减除的算法研究

背景减除的算法研究

国防科学技术大学硕士学位论文背景减除的算法研究姓名:孙吉花申请学位级别:硕士专业:控制科学与工程指导教师:刘肖琳20061101国防科技大学研究生院硕士学位论文可以看出,第一类的概率最大,其平均值为176左右,取该像素的R值分量为176。

依此方法遍历所有像素的RGB值,即可以得到一幅完整的彩色背景模型图像。

数字图像处理中的灰度直方图概念与图像序列的RGB三个通道的数值单独进行统计的方法有相通之处.若把图像序列的RGB三个值分别作为灰度来看,上述的统计过程可以用三个灰度直方图分析来进行。

只是这里的灰度直方图不是单幅图像的,而是图像序列的某个对应像素位置的某个颜色单值的统计结果。

灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数。

其横坐标是灰度级,纵坐标是该灰度出现的频率汹1.对应于此处的应用,某个颜色单值的直方图是该颜色分量的函数,描述的是图像序列中某个像素位置的该分量具有此数值的个数。

例如图3~5所示;图3样本图像序列2中(100,20)像素位置的R直方图图4样本图像序列2中(100,20)像素位置的G直方图国防科技大学研究生院硕士学位论文图5样本图像序列2中(100,20)像素位置的B直方图图3~5中横坐标是该颜色分量的数值范围(图像序列中该像素的此颜色分量的最小值到最大值),纵坐标是该数值的频率(出现的次数).由图3~5可知;R通道的高频数值主要集中在两个数值,即117和118,按方柱高低的比例取其平均值作为(100,20)位置的R数值。

G通道的数值与R通道类似,高频数值集中在107和108上,按方柱高低的比例取平均值作为(100,20)位置的G数值。

B通道的情况就有些特殊,高频数值集中在107上,形成单峰,直接获取数值作为(100,20)位置的B数值。

类似的方法循环遍历所有的像素,就得到完整的一幅彩色图像,也就是我们所求的背景模型。

2.2.2静态背景减除的基本原理根据背景模型与当前视频图像的对比,找到有差异的像素归为前景目标。

服务机器人视觉识别技术与应用考核试卷

服务机器人视觉识别技术与应用考核试卷
D.以上都影响
19.以下哪些是服务机器人视觉识别系统可能面临的挑战?()
A.复杂环境下的识别
B.低分辨率图像的处理
C.实时性要求
D.以上都是挑战
20.在服务机器人视觉识别中,哪些方法可以用于提高目标跟踪的准确性?()
A.多目标跟踪算法
B.上下文信息利用
C.深度学习模型的自适应更新
D.以上都可以用于提高准确性
五、主观题(本题共4小题,每题5分,共20分)
1.请简述服务机器人视觉识别技术的基本流程,并说明每个步骤的作用。
2.在服务机器人视觉识别中,如何利用深度学习技术进行物体检测?请列举至少两种常见的深度学习物体检测算法,并简要介绍它们的特点。
3.请分析在服务机器人视觉识别中,可能遇到的挑战和问题,并提出相应的解决策略。
A.基于阈值的分割
B.基于边缘的分割
C.基于区域的分割
D.以上都包括
9.服务机器人视觉识别系统中,哪些技术可用于提高实时性?()
A.硬件加速
B.算法优化
C.数据预处理
D.以上都有效
10.以下哪些是服务机器人视觉识别中的关键环节?()
A.图像采集
B.图像处理
C.特征提取
D.结果输出
11.在服务机器人视觉识别中,哪些方法可用于处理图像中的遮挡问题?()
A.数据增强
B.模型融合
C.特征选择
D.以上三项都正确
6.以下哪些因素可能会影响服务机器人视觉识别系统的性能?()
A.摄像头分辨率
B.环境光照条件
C.目标物体的运动速度
D.以上都影响
7.在服务机器人视觉识别领域,哪些技术常用于手势识别?()
A.深度学习
B.模板匹配

背景减除算法

背景减除算法

4/24/2017
2
Background Subtraction
• Background subtraction is a widely used approach for detecting moving objects from static cameras.
4/24/2017
3
Fundamental Logic
– Users can manually choose a threshold value, or – A thresholding algorithm can compute a value automatically, which is known as automatic thresholding
1. 2. 3. 4. Preprocessing, Background modeling, Foreground detection, and Data validation.
4/24/2017
24
Background Modeling
• Background modeling is at the heart of any background subtraction algorithm. • Background model is that which robust against environmental changes in the background, but sensitive enough to identify all moving objects of interest.
> Th
4/24/2017
16
Frame Differencing
Th = 25 Th = 24/2017
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

背景消减法_OpenCV_详解一.基本概念背景消减法可以看作一种特殊的帧差法。

基本思想:利用当前帧图像与背景图像对应象素点的灰度差值来检测车辆。

如果当前图像的象素点和背景图像的象素点灰度值差别很大,就认为此象素点有车通过;相反,如果当前图像的象素点和背景图像的象素点灰度值差别较小,在一定的阈值范围内,我们就认为此象素点为背景象素点。

背景差值法假定图像背景是静止不变的,即图像背景不随图像帧数而变,可表示为b(x,y),定义图像序列为f(x,y,i),其中(x,y)为图像位置坐标,i为图像帧数,将每一帧图像的灰度值减去背景的灰度值可得到一个差值图像:id(x,y,i)=f(x,y,i)-b(x,y)背景差值法检测运动目标速度快,检测准确,易于实现,其关键是背景图像的获取与背景更新。

在实际应用中,静止背景是不易直接获得的,同时,由于背景图像的动态变化,需要通过视频序列的帧间信息来估计和恢复背景,即背景重建,所以要选择性的更新背景。

然而它对于动态场景的变化,例如光照的变化和阴影的干扰等特别敏感。

因此,选取一个可靠的背景模型进行背景的提取与动态更新以适应环境的变化是必要的。

使用背景差分法进行运动检测通常会遇到如下一些问题:(1)背景获取:最简单的方法是在场景中没有运动目标的情况下进行,但在现实中肯定是无法满足的,如高速公路和城市交通的监控,需要一种方法能在场景存在运动目标的情况下获得背景图像。

(2)背景的扰动:如树叶、树枝等各种东西的摇动(3)外界光照条件的变化(4)背景中固定对象的移动(5)背景的更新(6)阴影的影响背景消减法根据其背景模型的不同又可分为:直方图法、平均值法、单分布高斯背景模型、混合高斯分布背景模型、Kalman滤波器法,HMM模型法。

二.下面分享的是两种背景实现方式:(1)背景即为第一帧图像,简单的先看看程序的基本步骤和实现方法。

这种方法适用于第一帧即为全部背景,如果存在不是背景的物体,将出现误差;同时进行了简单的背景更新;(2)背景为前50帧的平均值,对于高速的车流量较少的地段,背景提取较理想,车辆缓慢移动时会在背景上留下痕迹。

同时也进行了背景的简单更新;(3)同样的方法可以尝试不同的背景提取模型。

三.程序源代码[cpp]view plaincopy1.#include "stdafx.h" //背景为第一帧2.#include "highgui.h"3.#include "cv.h"4.#include "cxcore.h"5.#include "ml.h"6.7.int main(int argc, char* argv[])8.{9. CvCapture* pCapture = cvCaptureFromFile("video.avi");10.if( !pCapture) return -1;11.12. IplImage* pImgFrame = NULL;13. IplImage* pImgProcessed = NULL;14. IplImage* pImgBackground = NULL;15. IplImage* pyrImage = NULL;16.17. CvMat* pMatFrame = NULL;18. CvMat* pMatProcessed = NULL;19. CvMat* pMatBackground = NULL;20.21. cvNamedWindow("video", 0);22. cvNamedWindow("background",0);23. cvNamedWindow("processed",0);24.25. cvResizeWindow("video",300,300); //重新定义窗口的大小26. cvResizeWindow("background",300,300);27. cvResizeWindow("processed",300,300);28.29. cvMoveWindow("video", 0, 100); //设定窗口的位置30. cvMoveWindow("background", 350, 100);31. cvMoveWindow("processed", 700, 100);32.33.//int thresh_low = 20;34.//cvCreateTrackbar("Low","processed",&thresh_low,255,NULL); //创建滚动条,显示阈值35.36. pImgFrame = cvQueryFrame( pCapture ); //取第一帧37. pImgBackground = cvCreateImage(cvSize(pImgFrame->width, pImgFrame->height), IPL_DEPTH_8U,1);38. pImgProcessed = cvCreateImage(cvSize(pImgFrame->width, pImgFrame->height), IPL_DEPTH_8U,1);39. pyrImage = cvCreateImage(cvSize(pImgFrame->width/2, pImgFrame->height/2), IPL_DEPTH_8U,1);40.41. pMatBackground = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);42. pMatProcessed = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);43. pMatFrame = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);44.45. cvSmooth(pImgFrame, pImgFrame, CV_GAUSSIAN, 3, 0, 0); //高斯平滑46. cvCvtColor(pImgFrame, pImgProcessed, CV_BGR2GRAY);47. cvCvtColor(pImgFrame, pImgBackground, CV_BGR2GRAY);48. cvConvert(pImgProcessed, pMatBackground);49. cvConvert(pImgProcessed, pMatFrame);50. cvConvert(pImgProcessed, pMatProcessed);51.52. cvSmooth(pMatBackground, pMatBackground, CV_GAUSSIAN, 3, 0, 0);53.54.while(pImgFrame = cvQueryFrame( pCapture ))55. {56. cvShowImage("video", pImgFrame);57. cvSmooth(pImgFrame, pImgFrame, CV_GAUSSIAN, 3, 0, 0);58.59. cvCvtColor(pImgFrame, pImgProcessed, CV_BGR2GRAY);60. cvConvert(pImgProcessed, pMatFrame);61.62. cvSmooth(pMatFrame, pMatFrame, CV_GAUSSIAN, 3, 0, 0);63. cvAbsDiff(pMatFrame, pMatBackground, pMatProcessed);64.65. cvThreshold(pMatProcessed, pImgProcessed, 20, 255.0, CV_THRESH_BINARY);66.67.//cvPyrDown(pImgProcessed,pyrImage,CV_GAUSSIAN_5x5); //GAUSSIAN金字塔向下采样68.//cvPyrUp(pyrImage,pImgProcessed,CV_GAUSSIAN_5x5);69.70. cvErode(pImgProcessed, pImgProcessed, 0, 1); //腐蚀71. cvDilate(pImgProcessed, pImgProcessed, 0, 1); //膨胀72.73. cvRunningAvg(pMatFrame, pMatBackground, 0.0003, 0); //背景更新74. cvConvert(pMatBackground, pImgBackground);75.76. cvFlip(pImgBackground,NULL,0); //垂直旋转图像77. cvFlip(pImgProcessed,NULL,0);78. cvShowImage("background", pImgBackground);79. cvShowImage("processed", pImgProcessed);80.81.if( cvWaitKey(33) == 27 ) //触发Esc键,跳出82. {83.break;84. }85. }86.87. cvDestroyWindow("video");88. cvDestroyWindow("background");89. cvDestroyWindow("processed");90.91. cvReleaseImage(&pImgProcessed);92. cvReleaseImage(&pImgBackground);93.94. cvReleaseMat(&pMatFrame);95. cvReleaseMat(&pMatProcessed);96. cvReleaseMat(&pMatBackground);97.98. cvReleaseCapture(&pCapture);99.100.return 0;101.}[cpp]view plaincopy1.#include "stdafx.h" //背景为前50帧的平均值2.#include "highgui.h"3.#include "cv.h"4.#include "cxcore.h"5.#include "ml.h"6.7.int main(int argc, char* argv[])8.{9. CvCapture* pCapture = cvCaptureFromFile("video.avi");10.if( !pCapture) return -1;11.12. IplImage* pImgFrame = NULL;13. IplImage* pImgProcessed = NULL;14. IplImage* pImgBackground = NULL;15. IplImage* pyrImage = NULL;16.17. CvMat* pMatFrame = NULL;18. CvMat* pMatProcessed = NULL;19. CvMat* pMatBackground = NULL;20.21. cvNamedWindow("video", 0);22. cvNamedWindow("background",0);23. cvNamedWindow("processed",0);24.25. cvResizeWindow("video",300,300); //重新定义窗口的大小26. cvResizeWindow("background",300,300);27. cvResizeWindow("processed",300,300);28.29. cvMoveWindow("video", 0, 100); //设定窗口的位置30. cvMoveWindow("background", 350, 100);31. cvMoveWindow("processed", 700, 100);32.33.//int thresh_low = 20;34.//cvCreateTrackbar("Low","processed",&thresh_low,255,NULL); //创建滚动条,显示阈值35.36. pImgFrame = cvQueryFrame( pCapture ); //取第一帧37. pImgBackground = cvCreateImage(cvSize(pImgFrame->width, pImgFrame->height), IPL_DEPTH_8U,1);38. pImgProcessed = cvCreateImage(cvSize(pImgFrame->width, pImgFrame->height), IPL_DEPTH_8U,1);39. pyrImage = cvCreateImage(cvSize(pImgFrame->width/2, pImgFrame->height/2), IPL_DEPTH_8U,1);40.41. pMatBackground = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);42. pMatProcessed = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);43. pMatFrame = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1);44.45.46.int i=1;47. CvMat* pMat = NULL,*pMat1=NULL,*pMatSum=NULL,*pMatAve=NULL;48. pMat = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1); //存放当前帧49. pMat1 = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1); //存放前一帧50. pMatSum = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1); //所有帧的和51. pMatAve = cvCreateMat(pImgFrame->height, pImgFrame->width, CV_32FC1); //帧的平均52.while(i<=50)53. {54. pImgFrame = cvQueryFrame( pCapture );55. cvCvtColor(pImgFrame, pImgBackground, CV_BGR2GRAY);56. cvConvert(pImgBackground, pMat);57. cvAdd(pMat,pMat1,pMatSum,NULL);58. pMat1=pMatSum;59. i++;60. }61. cvConvertScale(pMatSum, pMatAve, 0.02, 0 ); //求平均值62. cvConvert(pMatAve, pMatBackground);63. cvSmooth(pMatBackground, pMatBackground, CV_GAUSSIAN, 3, 0, 0);64. cvSetCaptureProperty(pCapture, CV_CAP_PROP_POS_FRAMES, 0. );65.66. cvSmooth(pImgFrame, pImgFrame, CV_GAUSSIAN, 3, 0, 0); //高斯平滑67. cvCvtColor(pImgFrame, pImgProcessed, CV_BGR2GRAY);68. cvConvert(pImgProcessed, pMatFrame);69. cvConvert(pImgProcessed, pMatProcessed);70.71.while(pImgFrame = cvQueryFrame( pCapture ))72. {73. cvShowImage("video", pImgFrame);74. cvSmooth(pImgFrame, pImgFrame, CV_GAUSSIAN, 3, 0, 0);75.76. cvCvtColor(pImgFrame, pImgProcessed, CV_BGR2GRAY);77. cvConvert(pImgProcessed, pMatFrame);78.79. cvSmooth(pMatFrame, pMatFrame, CV_GAUSSIAN, 3, 0, 0);80. cvAbsDiff(pMatFrame, pMatBackground, pMatProcessed);81.82. cvThreshold(pMatProcessed, pImgProcessed, 20, 255.0, CV_THRESH_BINARY);83.84.//cvPyrDown(pImgProcessed,pyrImage,CV_GAUSSIAN_5x5); //GAUSSIAN金字塔向下采样85.//cvPyrUp(pyrImage,pImgProcessed,CV_GAUSSIAN_5x5);86.87. cvErode(pImgProcessed, pImgProcessed, 0, 1); //腐蚀88. cvDilate(pImgProcessed, pImgProcessed, 0, 1); //膨胀89.90. cvRunningAvg(pMatFrame, pMatBackground, 0.0003, 0); //背景更新91. cvConvert(pMatBackground, pImgBackground);92.93. cvFlip(pImgBackground,NULL,0); //垂直旋转图像94. cvFlip(pImgProcessed,NULL,0);95. cvShowImage("background", pImgBackground);96. cvShowImage("processed", pImgProcessed);97.98.if( cvWaitKey(50) == 27 ) //触发Esc键,跳出99. {100.break;101. }102. }103.104. cvDestroyWindow("video");105. cvDestroyWindow("background");106. cvDestroyWindow("processed");107.108. cvReleaseImage(&pImgProcessed);109. cvReleaseImage(&pImgBackground);110.111. cvReleaseMat(&pMatFrame);112. cvReleaseMat(&pMatProcessed);113. cvReleaseMat(&pMatBackground);114.115. cvReleaseCapture(&pCapture);116.117.return 0;118.}。

相关文档
最新文档