电子信息综合实训报告_第1页
电子信息综合实训报告_第2页
电子信息综合实训报告_第3页
电子信息综合实训报告_第4页
电子信息综合实训报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、视频安防监控系统实验目的1) 了解智能家居安防监控系统的构成和功能。2) 了解智能家居远程视频监控方法。3) 熟悉一些图像分析方法,并通过使用VS2010和OpenCV学习几种用于图像处理的算法。实验内容1) 通过网络摄像机对家庭进行远程实时监控。2) 配置Visual Studio和OpenCV,使其满足图像处理的软件环境。3) 编写C语言程序,运用几种算法对图像进行分析处理。实验所用仪表及设备1) 硬件:PC一台、EasyN的F系列网络摄像机、家庭网关、家庭网络服务器。2) 软件:Microsoft Visual Studio 2010、OpenCV2.3.1。实验原理一、 安防监控系统概

2、述1 安防系统三个基本要素(1) 探测能及时地发现防范区域内的各种异常现象。安防系统探测的对象主要是人或人的行为。(2) 环境变量安防系统要能对探测的结果做出评价(判断其真伪),要控制事件发生的过程,了解事件处置的(3) 周界管理和出入控制安防系统要有明确的防范区域,即周(边)界。通过各种物理的、技术(电子)的手段,组成一个封闭的周界,并通过与周界的出入口,对人、物的出入进行管理和控制。安防系统应保证合法出入防范区域的人或物的通畅,有效地发现和阻止非法的出入。2 安防监控系统的功能对于智能家居安防监控系来说,能够实现防盗报警、消防报警、气体泄漏报警和紧急求助报警等功能。这些功能主要是靠安装在住

3、宅周界和住宅内部各处的探测传感器将信号进行采集。由智能家居控制器进行智能判别,如果发现异常情况,则发出声光报警,同时将报警信号通过网络传送到主人的移动终端。(1) 家庭防盗报警功能通过视频摄像头检测家中是否被盗,定时地传送相应的图像给中央控制器,由中央控制器分析图像并监测是否有人闯入,主人和小区警卫可通过安装在住户室内的报警控制器在小区管理中心得到信号从而快速接警处理。(2) 确保安全的生活空间多层次监控系统确保安全的生活空间。家庭网络将监视触角延伸至家庭的每一个角落,智能安防实行安全防范系统自动化监控管理,提升家庭的安全保障。(3) 远程监控系统将摄像机连接至中央控制系统,并进行远程控制,可

4、随时通过计算机、手机远程查看各监控区域情况。(4) 及时了解家中的情况监控设备可通过网络技术进行远程实时监视,远程录像查询回放及云台控制。利用先进的3G技术,在外用手机就可以查看家中实时画面,了解家中情况。用户可以在离开家的时候依然照顾和看护家里需要照顾的人。(5) 录像回查按时间或事件检索案件发生现场的录像,进行嫌疑视频信息收集,搜索嫌疑人、嫌疑车辆等线索。对应系统功能需求:输出视频前端存储和后端备份存储;基于事件的视频存储;录像文件检索和回放等。(6) 视频智能分析和快速预警对实时视频图像进行智能分析,及时发现可疑事件,并向家庭主人发出预警,同时切换出警情的图像进行自动跟踪。3 智能家居网

5、络视频监控系统的结构和功能基于安防系统的三要素和我们要实现的功能,智能家居网络视频监控系统主要由前端视频采集单元(PU)、传输网络(TU)、中心服务平台(CSP)和客户端单元(CU)四部分组成。系统在前端进行视频采集,经过压缩与优化算法等处理,通过网络传输进入中心服务平台,中心服务平台包含前端视频接入、视频分析与报警、平台管理、客户端接入等模块。客户端通过校园网或IP宽带、3G等网络获取智能视频监控信息、进行预置等。1) 前端视频采集单元(PU),由摄像机、采集卡、数据压缩卡、云台控制机及其他外部设备组成,获取视频的原始数据,并进行初步的数据压缩。2) 传输网络(TU),采用无线和有线的方式都

6、可以实行。有线方式是互联网络平台,可支持各种互联网接入技术,如ADSL、以太网、专线等,充分利用互联网的经济、方便的特性。无线方式是通过中国移动、中国联通、中国电信等平台实施,网络覆盖率高。3) 中心服务平台(CSP),为认证、管理、运营、存储平台,支持多用户、多范围、多应用、多分布的整体监控,是联系各模块和客户端的枢纽。在智能家居中,中心服务平台的功能主要由家庭服务器完成。平台被分为七个功能区:(1)视频接入与分析模块。实现前端和平台间信令的交互,获取前端视频数据接入,分析与处理视频数据,并实现视频请求、接收、分发。视频分析包括运动目标检测、目标区域提取、目标识别等过程。(2)预报警及联动发

7、动模块。对视频的实时监控中触发预设阈值或产生异常产生报警信号,并按报警级别发动联动措施,它是智能视频监控系统不可缺少的部分。(3)多媒体数据库。(4)用户认证。(5)平台管理模块。用来实现对平台整理设备的管理,实现网管功能。(6)客户端接入模块。为用户提供界面接入接口、实现客户端与平台间信令及信息的交互。操作控制模块来处理系统的各种控制信令,对客户端信令进行响应。(7)调度模块。用来控制交换层设备、媒体流数据的流向和计费信息处理等。4) 客户端单元(CU),用户与中心服务平台交互的平台,获取远程监控实时视频信息、视频检索、控制摄像头和预置预报警阈值及转发告警信息。客户端支持多种形式的监控终端,

8、用户可以通过手机、PDA、笔记本电脑等移动设备,在网络的任何一个接入点接入,在通过用户认证后可以对现场监控,只要通过IE浏览器或客户端软件,就可控制远端设备,如控制摄像机的角度、镜头焦距等,并可接收报警信息。以智能手机为终端的客户端,基于3G或Wi-Fi;以手机厂商提供的开发软件为平台,能实现用户任何时间、任何地点的视频监控;以PC为终端的客户端。基于多媒体技术,利用PC强大的处理能力,提供高质量的视频播放、智能识别等操作。其主要包含三个模块:(1)分析设置模块。分析设置模块是根据不同现场环境中的摄像头以其发挥的不同功能分别进行分析设置。首先是摄像头的定标,然后是告警预置。最后是目标行为分析参

9、数设置。最终形成参数配置文件存储于中心服务器。(2)监控计划模块。对不同地段不同时间的同一个摄像头获取的视频可以实施多种视频监控方案。在场景监控条件发生改变或者监控目标需要临时调整时,可以设置各种监控计划,其包括一次性的、周期的、某一时间段的或默认计划等多种监控选择方案。(3)实时视频播放模块。在客户端实现视频流的实时播放是一组过滤器和相关的应用程序来实现的,需要对从中心服务器以RTP转发过的视频压缩包进行还原,以一定视频压缩标准解码器进行解码,最后形成视频的实时播放。4 视频监控系统工作流程系统以全数字网络视频监控技术为基础,利用网络资源优势,计算机软件技术、数字视频分析与处理等技术,完成分

10、布式远程集中监控,实现资源共享、分级使用、权限管理、主动识别与跟踪、对象行为分析、联动预报警等系统。流程:1)CU通过客户端接入模块向平台管理模块请求访问某前端视频采集单元实时视频。2)业务管理模块判断该User是否有访问权限、业务类型及设置了异地访问,另需判断PU是否本域。3)若PU在异域,将请求发送给PU所在域CSP。4)PU所在域CSP通过接入及视频分析模块、PU、VTDU建立交互,形成媒体访问路由。并产生一个唤回号。5)若路由终点为PU,向PU发送Call ID。6)向路由上各VTDU发送媒体访问地址、Call ID。7)PU所在域CSP将确定的访问地址和Call ID返回给CU所在域

11、CSP。8)CU所在域CSP通过与VTDU交互确定本域内媒体访问路由。9)向路由上各VTDU发送媒体访问地址、Call ID。10)向CU返回媒体访问地址、Call ID。11)各段分别请求建立媒体通道。12)各被请求设备验证Call ID符合后,各段分别完成媒体通道建立,形成一条视频传输通道。13)通道建立后,接入视频分析模块实时接收PU端视频数据,视频分析模块实时与多媒体数据库交互、鉴别是否有异常发生,如有,按照一定的算法分析识别视频对象,并分析对象行为,达到平台管理模块预置的警戒阈值时启动报警服务,然后通过客户端告知CU。二、 硬件设计与实现智能家居平台上视频安防的主要控件为EasyN的

12、F系列网络摄像机,用于IP网络基础上的远程视频图像传输。其采用MJPEG硬件压缩技术,可以在LAN/WAN上以30f/s传输高质量(VGA或CIF)的实时视频图像。并且内置有Web服务器,支持IE浏览,可通过网络进行远程配置、启动或固件升级,设备管理和维护非常方便。1. 设备的性能和功能1) 采用高性能、功能强大的媒体处理器32bit RSIC。2) 高清晰度COMS感光芯片,每秒可达实时25帧。3) 采用优化Motion-JPEG视频压缩算法,窄带上实现高清图像传输。4) 最多支持5个用户同时浏览,使用转发服务器功能则无人数限制。5) 内置Web Server,方便用户使用标准的浏览器实现对

13、现场的实时监控以及设置管理。6) 支持Wi-Fi。7) 支持远程系统升级。8) 支持动态域名解析,支持局域网和互联网(拨号上网、路由器上网等)。9) 支持单、双向语音对讲。10) 移动侦测报警功能,可以设置报警时间段。11) 内置看门狗、异常自动恢复功能。网络中断后可自动连接。12) 动态报警功能,可以设置报警时间段。13) 发送邮件、FTP图片、外部输出。14) 支持手机访问。15) 支持预置位,并支持报警时调用预置位。2. 设备的接口供电灯、网络灯、天线、以太网端口、I/O接口、电源输入口。3. 设备的规格和硬件参数表三、 软件设计与实现计算机视觉检测是建立在计算机视觉研究基础上的一门新兴

14、检测技术,与计算机视觉研究的视觉模式识别、视觉理解等内容稍有不同,计算机视觉检测更侧重于获取被检测对象的精确参数,或者根据给出的参数提取出满足条件的目标。计算机视觉检测过程主要有三个步骤:视觉影像的获取、视觉数据的处理、目标检测及结果输出。视觉影像的获取阶段完成检测对象的数字图像生成。不同的检测对象有时需采用不同的成像传感器。智能视频监控系统就是基于计算机视觉检测技术的一个应用。其中,运动目标检测技术和目标识别与跟踪算法为该系统的核心技术。在实现目标检测前,首先要学习一些图像分析方法,例如帧差法、人脸检测、Canny边缘检测和运动目标检测。软件开发平台(1) VS2010(2) OpenCV四

15、、 图像理算法(见实验分析)五、 实验过程1. 安装VS2010和OpenCV2. 配置VS2010和OpenCV设置VS2010,配置C+环境进入页面配置OpenCV 2.3.1:首先需要进行环境变量配置,在环境变量名Path中加入OpenCV对应路径。添加前:添加后:新建控制台工程测试:按照指导书配置:在源文件中新建项:新建C+文件,名为test.cpp:在所创建工程属性的VC+目录中加入OpenCV相应目录:包含目录库目录总结:这两步的意义在于,配置include路径告诉了VS去什么地方寻找OpenCV的头文件;而配置lib路径告诉了VS去什么地方寻找OpenCV的库文件。然后要在链接器

16、下的输入项中的附加依赖项加入相应版本的依赖项针对Debug配置添加这些库:opencv_calib3d240d.libopencv_contrib240d.libopencv_core240d.libopencv_features2d240d.libopencv_flann240d.libopencv_gpu240d.libopencv_highgui240d.libopencv_imgproc240d.libopencv_legacy240d.libopencv_ml240d.libopencv_objdetect240d.libopencv_ts240d.libopencv_video24

17、0d.lib这样就完成了所有的配置。3. 帧差法在运动目标检测中的应用在VS2010中运行根据帧差法配置好的工程。发现调试失败。具体原因应该是程序中两个头文件"cv.h"、"highgui.h"没有成功预处理。这应该是前面配置目录和附加依赖项中出现的问题。重新设置路径问题解决,附加依赖项增加了许多。再次运行,出现系统错误:下载相关配置文件后,设定视频路径,可以得到检测结果:更改时间间隔:设置cvWaitKey(4000),可以观察到三个窗口的采集频率都由以前的250ms每次变为1s每次。换用其他视频,总结出第一个窗口和第二个窗口为原视频相隔预设时间的两个

18、画帧,它们又分别按预设时间依次采集,因此间隔永远是预设时间值。第三个窗口是前两个窗口图像做差的结果,显示的轮廓线表示两图的变化量,从而达到检测运动物体的目的。4. 人脸检测网络摄像头人脸检测在VS2010中运行已经配置好的工程。程序和指导书上不同的是,调用本地摄像头地址进行检测,而且将自动检测到人脸部分,从而在视窗内显示红色圆圈,包围了人脸部的大部分范围。运行已经配置好的工程,并且在程序中设置需要人脸识别的视频位置。CvCapture *capture=cvCreateFileCapture("F:收藏文件夹视频beyond-海阔天空.avi")从设定的本地视频中检测到人脸

19、。经过多个视频对比,发现人脸检测中有时会将非面部的物体识别为人脸。5. 基于阈值分割的边缘检测原理是通过设定不同的特征阈值,把图像像素点分为若干类。运行根据阈值分割配置好的工程,在程序中修改本地图像地址。image=cvLoadImage("F:收藏文件夹D图片别人作品薇薇安.jpg")可以调节阈值获得不同的边缘检测效果。几个OpenCV中常用的结构及函数总结:1、IplImage结构:a) IplImage结构体:typedef struct _IplImageint nSize; /* IplImage大小 */int ID; /* 版本 (=0)*/int nChan

20、nels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */int alphaChannel; /* 被OpenCV忽略 */int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,IPL_DEPTH_32F 和IPL_DEPTH_64F */char colorModel4; /* 被OpenCV忽略 */char channelSeq4; /* 同上 */int dataOrder; /* 0 - 交叉存取颜色通道, 1 -

21、分开的颜色通道.只有cvCreateImage可以创建交叉存取图像 */int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */int align; /* 图像行排列方式 (4 or 8),在 OpenCV 被忽略,使用 widthStep 代替 */int width; /* 图像宽像素数 */int height; /* 图像高像素数*/struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,只对该区域进行处理 */struct _IplImage *maskROI; /* 在 OpenCV中必须为NULL */void *imageId;

22、 /* 同上*/struct _IplTileInfo *tileInfo; /*同上*/int imageSize; /* 图像数据大小(在交叉存取格式下ImageSize=image->height*image->widthStep),单位字节*/char *imageData; /* 指向排列的图像数据 */int widthStep; /* 排列的图像行大小,以字节为单位 */int BorderMode4; /* 边际结束模式, 在 OpenCV 被忽略*/int BorderConst4; /* 同上 */char *imageDataOrigin; /* 指

23、针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */ IplImage;注:width和widthstep的区别:前者表示图像的是每行像素数,后者表示存储一行像素需要的字节数。在OpenCV里面,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只要使用前三个,最后一个空着。也就是一个宽3高3的图像的imagData数据大小为4*3=12字节。2、CvCapture结构体:CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型

24、(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复。2、常用的函数(I/O) 1. 图像载入函数        函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下:        IplImage* cvLoadImage( const char* f

25、ilename, int iscolor);其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项(可不填),可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。 2. 窗口定义函数        函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:        int cvNamedWindow( const char* name, unsigned long flag

26、s );        其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。3. 图像显示函数        函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:        void cvShowImage( const char* name, const CvArr* image );  &

27、#160;     其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。4. 图像保存函数         函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下:int cvSaveImage( const char* filename, const CvArr* image );其中,filename是图像保存路径和名称(记得要写上后缀,否则会报错),image是IplImage指针变量。5. 图像销毁函数函数cvReleaseImage销毁已定义的IplI

28、mage指针变量,释放占用内存空间。其函数原型如下:void cvReleaseImage( IplImage* image );其中,image为已定义的IplImage指针。6. 其他cvCreateFileCapture(const char* mov)cvCreateFileCapture()通过参数设置确定要读入的avi文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入avi文件的信息,其中包含状态信息。调用这个函数之后,返回指针所指向的CvCapture结构呗初始化到对应的avi文件的开头。IplImage* cvCreateImage(CvSize si

29、ze,int depth,int channels);cvCreateImage:创建首地址并且分配存储空间:IplImage* cvCreateImage(CvSize size,int depth,int channels);/size:图像的宽、高;depth:图像元素的位深度,可以是一下其中之一:IPL_DEPTH_8U - 无符号8位整型IPL_DEPTH_8S - 有符号8位整型IPL_DEPTH_16U - 无符号16位整型IPL_DEPTH_16S - 有符号16位整型IPL_DEPTH_32S - 有符号32位整型IPL_DEPTH_32F - 单精度浮点数IPL_DEPTH

30、_64F - 双精度浮点数cvSetTrackbarPos("进度条名称","窗口名称",pos):这个函数要和另外两个函数配套使用,一个是回调函数,也就是响应鼠标的函数(即下面的CvTrackbarCallback on_change),这个是自定义的。第二个是创建函数cvCreateTrackbar(),这个函数的最后一个参数是前面回调函数,用来创建一个进度条。关于cvSetTrackbarPos,他有3个参数cvSetTrackbarPos("进度条名称","窗口名称",pos)。第三个参数是当前进度条的位置

31、,可以按照视频帧数的比例来设置当前进度值,也可以用循环pos+来设置。cvQueryFrame(CvCapture* capture):表示从摄像头或者文件中抓取并返回一帧。IplImage* cvQueryFrame(CvCapture* capture);函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并且返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。cvQueryFrame的参数是CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoa

32、dImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在cvCapture结构中分配好的内存,这样就没必要通过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像对应的内存空间会被释放。CvCaptureFromCAM(int index):初始化从摄像头中获取视频:CvCapture* cvCaptureFromCAM(int index);index:要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那么使用参数-1便可以。函数给从摄像头的视频流分配和初始化CvCapture结构。

33、cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* value,int count,CvTrackbarCallback on_change);该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。定义:CV_EXTERN_C_FUNCPTR(void (*CvTrackbarCallback)(int pos);int cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* v

34、alue,int count,CvTrackbarCallback on_change);参数:trackbar_name:被创建的trackbar名字window_name:窗口名字,这个窗口将为被创建trackbar的父对象value:整数指针,它的值将反映滑块的位置,这个变量指定创建时的滑块位置。count:滑块位置的最大值。最小值一直是0on_change:每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int),如果没有回调函数,这个值可以设置为NULL。函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制)

35、,指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar默认显示在指定窗口的顶端,可以通过cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的位置。double cvGetCaptureProperty(CvCapture* capture,int property_id);double cvGetCaptureProperty(CvCapture* capture,int property_id)获取视频文件的一些属性,/capture

36、视频获取结构;property_id 属性标识。以下是OpenCV属性的一些宏定义:CV_CAP_PROP_POS_MSEC /影片目前位置,为毫秒数或者视频获取时间戳CV_CAP_PROP_POS_FRAMES /将被下一步解压/获取的帧索引,以0为起点CV_CAP_PROP_POS_AVI_RATIO /视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)CV_CAP_PROP_FRAME_WIDTH /视频流中的帧宽度CV_CAP_PROP_FRAME_HEIGHT  /视频流中的帧高度CV_CAP_PROP_FPS /帧率CV_CAP_PROP_FOURCC 

37、0;/表示codec的四个字符CV_CAP_PROP_FRAME_COUNT  / 视频文件中帧的总数CV_CAP_PROP_FORMAT       CV_CAP_PROP_MODE          CV_CAP_PROP_BRIGHTNESS    CV_CAP_PROP_CONTRAST      CV_CAP_PROP_SATURATION    CV_CAP_PROP_HUE      

38、;    CV_CAP_PROP_GAIN         CV_CAP_PROP_EXPOSURE     CV_CAP_PROP_CONVERT_RGB   CV_CAP_PROP_WHITE_BALANCE CV_CAP_PROP_RECTIFICATION 通过创建一个Capture对象的指针后,调用cvGetCaptureProperty即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_C

39、AP_PROP_FRAME_COUNT这个属性;因为cvGetCaptureProperty对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为AVI格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数例如:示例1:CvCapture* cap = cvCaptureFromFile(videoName);/获取视频int numFrames = (int) cvGetCapturePropert

40、y(cap,CV_CAP_PROP_FRAME_COUNT);/得到视频帧数,/得到的帧数是148帧示例2:较好的方法IplImage* pImg = NULL;int count = 0;while(pImg = cvQueryFrame(cap)!=NULL)count+;/得到的帧数只有60帧cvSetCapturePropertyint  cvSetCaptureProperty(CvCapture* capture,int property_id,double value);注意此方法定位并不准确capture:视频获取结构property_id:属性识别,可以是下面之一:

41、 CV_CAP_PROP_POS_MSEC    /从文件开始的位置,单位为毫秒CV_CAP_PROP_POS_FRAMES   /单位为帧数的位置(只对视频文件有效)CV_CAP_PROP_POS_AVI_RATIO   / 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)CV_CAP_PROP_FRAME_WIDTH  /视频流的帧宽度(只对摄像头有效)CV_CAP_PROP_FRAME_HEIGHT  /视频流的帧高度(只对摄像头有效)CV_CAP_PROP_FPS  /帧率(只对摄像头有效)CV

42、_CAP_PROP_FOURCC  /表示codec的四个字符(只对摄像头有效)value表示的是属性的值cvSmooth函数cvSmooth可以使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。每一种方法都有自己的特点和局限。没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换和32位浮点数到32为浮点数的变换格式。简单模糊和高斯模糊支持1-或3-通道,8-比特和32-比特浮点图像。这两种方法可以(in-place)方式处理图像。中值和双向滤波工作于1-或3-通道,8-位图像,但是不能以in-place方式处理图像。void cvSm

43、ooth(const CvArr* src,CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0,double param4=0);/src:输入图像/dst:输出图像/smoothtype:平滑方法平滑方法如下:CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。CV_BLUR (simple blur) - 对每个象素param1

44、15;param2邻域 求和并做尺度变换 1/(param1.param2).CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的).CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色sigma=param1,空间 sigma=param2. 平滑操作的第一个参数.param2:平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值

45、 为零,则表示其被设定为param1。param3:对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,n=param2 对应垂直核.对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。没有

46、缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.cvGetSizecvGetSize是Opencv提供的一种操作矩阵图像的函数得到二维的数组的尺寸,以CvSize返回。CvSize cvGetSize(const CvArr* arr);它与cvGetDims()密切相关,c

47、vGetDim()返回一个数组的大小。主要的不同是cvGetSize()是专为矩阵和图像设计的,这两种对象的维数总是2。其尺寸可以以CvSize结构的形式返回,例如当创建一个新的大小相同的矩阵或图像时,使用此函数就很方便。cvSizecvSize是OpenCV的基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似,但数据成员是integer类型的width和heigh原型:typedef struct CvSizeint width; /* 矩形宽 */int height; /* 矩形高 */CvSize;cvPyrDown功能:函数cvPyrDown使用Gaussian

48、金字塔分解对输入图像向下采样格式:void cvPyrDown(const CvArr* src,CvArr* dst,int filter = CV_GAUSSIAN_5x5);参数:src:输入图像、dst:输出图像,其宽度和高度应是输入图像的一半;filter:卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。六、思考题1. 视频监控系统都由哪些模块?简略描述各模块的作用。有前端视频采集、传输网络、中心服务平台、客户端四个主要模块。前段视频采集主要是负责图像的采集、压缩等简单的处理以及一些优化算法,然后将信号传给传输网络。传输网络通过各种通信技术传递信号。中心服务平台下又包含多个

49、子模块,主要负责视频接入、分析处理、触发一些应对措施如报警等,还有支持整个平台的管理的子模块。客户端主要是将平台的信息有效地反馈给用户,提供一些智能化的服务如播放视频、制定计划等。2. 观察运用帧差法时三个窗口中图像的区别,分析产生不同图像的原因。第一个窗口和第二个窗口为原视频相隔预设时间的两个画帧,它们又分别按预设时间依次采集,因此间隔永远是预设时间值。第三个窗口是前两个窗口图像做差的结果,显示的轮廓线表示两图的变化量,从而达到检测运动物体的目的。3. 在使用阈值分割边缘检测时,为什么阈值越高图像中的边缘轮廓越少?用自己的话来说明,设定的阈值越高,在比较两个像素时,它们的RGB颜色值的差异区

50、分越不严格,也就是它们更容易被当做一种颜色,体现在边缘检测上就是原本图像上处于边缘的两种颜色更易于被处理识别为同一种颜色,从而失去了边缘轮廓。附:视频安防监控系统人脸识别代码#include "stdafx.h"#include "cv.h"#include "highgui.h"#include <stdio.h>static CvHaarClassifierCascade* cascade = 0;static CvMemStorage* storage = 0;void detect_and_draw( IplImage* image );const char* cascade_name ="haarcascade_frontalface_alt.xml" /人脸检测要用到的分类器int _tmain(int argc, _TCHAR* argv) cascade = (C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论