基于VFW的照相组件的设计与开发.docx

上传人:b****1 文档编号:14055791 上传时间:2023-06-20 格式:DOCX 页数:31 大小:1.49MB
下载 相关 举报
基于VFW的照相组件的设计与开发.docx_第1页
第1页 / 共31页
基于VFW的照相组件的设计与开发.docx_第2页
第2页 / 共31页
基于VFW的照相组件的设计与开发.docx_第3页
第3页 / 共31页
基于VFW的照相组件的设计与开发.docx_第4页
第4页 / 共31页
基于VFW的照相组件的设计与开发.docx_第5页
第5页 / 共31页
基于VFW的照相组件的设计与开发.docx_第6页
第6页 / 共31页
基于VFW的照相组件的设计与开发.docx_第7页
第7页 / 共31页
基于VFW的照相组件的设计与开发.docx_第8页
第8页 / 共31页
基于VFW的照相组件的设计与开发.docx_第9页
第9页 / 共31页
基于VFW的照相组件的设计与开发.docx_第10页
第10页 / 共31页
基于VFW的照相组件的设计与开发.docx_第11页
第11页 / 共31页
基于VFW的照相组件的设计与开发.docx_第12页
第12页 / 共31页
基于VFW的照相组件的设计与开发.docx_第13页
第13页 / 共31页
基于VFW的照相组件的设计与开发.docx_第14页
第14页 / 共31页
基于VFW的照相组件的设计与开发.docx_第15页
第15页 / 共31页
基于VFW的照相组件的设计与开发.docx_第16页
第16页 / 共31页
基于VFW的照相组件的设计与开发.docx_第17页
第17页 / 共31页
基于VFW的照相组件的设计与开发.docx_第18页
第18页 / 共31页
基于VFW的照相组件的设计与开发.docx_第19页
第19页 / 共31页
基于VFW的照相组件的设计与开发.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于VFW的照相组件的设计与开发.docx

《基于VFW的照相组件的设计与开发.docx》由会员分享,可在线阅读,更多相关《基于VFW的照相组件的设计与开发.docx(31页珍藏版)》请在冰点文库上搜索。

基于VFW的照相组件的设计与开发.docx

基于VFW的照相组件的设计与开发

基于VFW的照相组件的设计与开发

摘要

随着多媒体信息技术的飞速发展,视频会议和视频捕捉工具在人们的工作和日常生活中扮演着越来越重要的角色。

照相组件的设计与开发以视频捕捉为基础,并对捕获的视频加工处理,从而满足人们的特定要求。

专用视频采集硬件设备(如摄像头等)能够获取视频数据,计算机将这些信号数据存入内存的指定缓冲区。

本照相组件,采用微软提供的VFW技术,实现对缓存在内存中的视频数据流的捕获,并对捕获的视频流进行截图、图片格式转换等处理。

从而为其它应用程序开发人员提供照相这个功能模块,实现共享。

关键词:

组件;视频捕获;视频采集;VFW技术

TheDesignandDevelopmentofCameraComponentBasedonVideoforWindows

Abstract

Alongwiththegreatevolutionofmultimediainformationtechnology,videomeetingandvideocapturetoolsplaytheimportantroleindailylife.Videocaptureisalsothefoundationofthisdesignanddevelopmentofcameracomponent.Andthencomponentprocessit.Thereby,itcanunceasinglymeetpeople’sspecialrequest.

Videocapturehardwaredevices(suchascamera)cangetvideodata,andthencomputerwoundtransferthosesignaleddataintoappointedbufferandkeepit.Thisvideocapturecomponentadoptingvideoforwindowstechnology,thatprovidedbyMicrosoftcompany.Itwoundcapturethevideodatawherekeepinmemory,andthendealwithit.Accordingly,thiscomponentcanprovidethisvideocapturefunctionmoduleforotherapplicationprogramdeveloper,finallysharetheprogram.

Keywords:

component;videocapture;videocollection;videoforwindowstechnology

目录

论文总页数:

24页

1引言1

1.1系统开发背景1

1.2国内外研究现状1

1.3本课题研究的意义1

2系统需求分析1

2.1任务概述1

2.2系统流程2

2.3功能需求2

2.4性能需求3

2.5系统开发相关介绍3

2.5.1VisualC++MFC应用程序概述3

2.5.2ActiveX控件简介4

2.5.3VFW技术简介5

3系统设计5

3.1系统模块设计5

3.2组件设计6

3.3视频抓取7

3.4对捕获的视频流的处理9

3.5图片处理10

3.5.1BMP图像文件格式10

3.5.2JPEG文件格式14

3.5.3位图文件保存14

3.5.4图片格式的转换15

4组件测试的VB设计17

5组件测试19

结论21

参考文献22

致谢23

声明24

1引言

1.1系统开发背景

照相组件能够捕获视频数据,能够操作视频参数及视频分辨率等,能对图片进行截取并转换。

通过以控件的形式进行编程,最后得到一个可移植的控件,能提供给其他的应用程序使用,而不管其它应用程序是用什么计算机语言开发出来的。

1.2国内外研究现状

由于组件编程的开发与设计思想利于程序的扩展,同时有利于组件移植,达到被其它应用程序使用的目的,因此组件编程从其思想形成以来,就不断得到广泛的应用。

因此,对照相组件的开发也在不断发展。

1.3本课题研究的意义

组件能为其他应用程序开发人员提供可重用的代码,提高代码的可移植性,从而为别的开发人员节省大量的时间和精力。

在别的开发人员要进行照相软件开发的时候,只需在工程中插入本组件,就可以直接使用本组件所提供的功能。

2系统需求分析

2.1任务概述

2.1.1开发目标

●能自动捕获视频数据流,并把它在窗口上用预览模式的形式显示出来;

●对视频数据的相关功能(如视频参数及视频分辨率等)进行设置;

●具有保存所捕获视频流为avi文件的功能;

●具有截取图片的功能,并把所截取的图片保存为位图;

●具有把位图文件转换为JPEG格式保存的功能。

2.1.2开发工具

开发语言主要使用VC,在.Net2003的环境上开发完成的,其中还调用了一些Win32API函数。

2.1.3开发环境

操作系统:

WindowsXP

开发环境:

.Net2003

2.1.4开发人员

王小军,负责整个组件,包括抓取视频、抓图及图片转换等的设计与开发。

2.1.5运行环境

虽然本组件是在.Net2003上开发,同时本组件具有抓取视频、抓图及图片转换等功能,但是由于组件本身并不能运行,所以必须注册组件并插入其它的应用程序中才能使用。

因此,本组件的运行环境取决于使用本组件的应用程序(容器)的开发环境。

2.2系统流程

系统总体流程如图1所示:

图1系统流程图

2.3功能需求

为了使其他的应用程序能够使用本组件,因此需要使用ActiveX控件编程。

根据本课题的要求与目标,本组件应主要有以下功能:

1)视频抓取

通过视频抓取可以捕获存入缓存的视频流,捕获视频流对用户来说是透明的,因此在捕获视频后,还需要显示到窗口。

2)控制功能

对视频参数和分辨率控制模块的设计,让用户对视频的画面质量进行调节。

由于VFW技术提供了相关的功能函数,因此在设计这两个功能模块时,直接调用capDlgVideoSource函数实现对视频参数的控制(如改变色调、对比度、亮度等);调用capDlgVideoFormat函数对分辨率进行控制。

3)保存视频

由于仅仅把捕获的视频显示到窗口固然能满足用户的需求,但是如果能够把视频流保存到文件中,这样将方便以后观看。

因此,本照相组件设置了保存视频文件的功能。

4)保存位图

如果某个时刻的画面比较经典,用户希望能够把这个画面直接保存下来。

由于BMP文件格式是Windows环境中与图像有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

因此,本组件设计了位图的保存。

5)图片格式转换

由于位图的文件格式,它所占用的空间相对比较大,而用户不想用太大的空间来保存图片。

为了达到更高的利用率,本组件需要实现对位图的压缩。

JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像。

换句话说,就是可以用最少的磁盘空间得到较好的图像品质。

而且JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:

1到40:

1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。

JPEG格式的应用非常广泛,特别是在网络和光盘读物上,都能找到它的身影。

目前各类浏览器均支持JPEG这种图像格式,因为JPEG格式的文件尺寸较小,下载速度快。

因此,本组件实现了位图到JPEG格式的转换。

2.4性能需求

根据本课题的要求、目标和现在的技术状况,可以确定其在性能方面应达到以下目标:

1)系统应当具有稳定性,具有对异常进行适时处理的能力,因此应当在完成设计时进行严格的测试;

2)系统界面友好,可操作性强;

3)系统具有很好的可扩展性,能够在今后的编程中对其进行扩展;

4)能够在其他的应用程序中使用。

2.5系统开发相关介绍

2.5.1VisualC++MFC应用程序概述

MFC是用来编写Windows应用程序的C++类集,该类集以层次结构组织起来,其中封装了大部分WindowsAPI函数和Windows控件,它所包含的功能涉及到整个Windows操作系统。

MFC不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。

使用MFC类库和VisualC++提供高度可视的应用程序开发工具,可使应用程序开发变得更简单,开发周期极大缩短,提高代码的可靠性和重用性。

2.5.2ActiveX控件简介

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。

在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。

在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(现在的网络主要包括Windows和Mac)中任意运行的程序。

这个组件就是ActiveX控件。

ActiveX是Microsoft为抗衡SunMicrosystems的JAVA技术而提出的,此控件的功能和JAVAapplet功能类似。

在Windows操作系统中,有一些以OCX结尾的文件。

OCX代表“对象链接与嵌入控件”(OLE),这个技术是Microsoft提出的程序技术,用于处理桌面文件的混合使用。

现在COM的概念已经取代OLE的一部分,Microsoft也使用ActiveX控件代表组件对象。

组件的一大优点就是可以被大多数应用程序再使用(这些应用程序称为组件容器)。

一个COM组件(ActiveX控件)可由不同语言的开发工具开发,包括C++和VisualBasic或PowerBuilder,甚至一些技术性语言如VBScript。

ActiveX控件在Windows95/NT和Macintosh中运行,Microsoft还准备支持UNIX的ActiveX控件。

ActiveX组件包括如下几类:

1)自动化服务器:

可以由其他应用程序编程驱动的组件。

自动化服务器至少包括一个,也许是多个供其他应用程序生成和连接的基于IDispatch的接口。

自动化服务器可以含有也可以没有用户界面(UI),这取决于服务器的特性和功能。

2)自动化控制器:

那些使用和操纵自动化服务器的应用程序。

3)控件:

ActiveX控件等价于以前的OLE控件或OCX。

一个典型的控件包括设计时和运行时的用户界面,唯一的IDispatch接口定义控件的方法和属性,唯一的IConnectionPoint接口用于控件可引发的事件。

4)文档:

ActiveX文档,即以前所说的DocObject,表示一种不仅仅是简单控件或自动化服务器的对象。

ActiveX文档在结构上是对OLE链接和模型的扩展并对其所在的容器具有更多控制权。

一个最显著的变化是菜单的显示方式。

一个典型的OLE文档的菜单会与容器菜单合并成一个新的集合,而ActiveX文档将替换整个菜单系统,只表现出文档的特性而不是文档与容器共同的特性。

5)容器:

ActiveX容器是一个可以作为自动化服务器、控件和文档宿主的应用程序。

ActiveX是Microsoft提出的一套基于COM(ComponentObjectModel,组件对象模型)的控件标准。

ActiveX/COM组件在使用时需要在系统中进行安装并注册,通常在应用程序的安装过程中即包括了ActiveX/COM组件的安装步骤。

由于越来越多的应用程序开始使用ActiveX/COM组件来扩展自身的业务逻辑、事务处理和应用服务的范围,因此,系统中安装的ActiveX/COM组件越来越多,而很多应用程序在卸载时没有同时删除这些组件。

2.5.3VFW技术简介

VFW是Microsoft公司推出的关于数字视频的一个软件开发包,其核心是AVI(AudioVideoInterleave)文件标准。

围绕AVI文件标准,VFW包含了一整套完整的视频采集、压缩、解压缩、回放和编辑的应用程序编程接口(后简称API)。

这些API主要分布在以下六个VFW的模块中:

1)AVICAP.DLL:

包含执行视频采集的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口。

2)MSVIDEO.DLL:

包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作。

3)MCIAVI.DRV:

包括对VFW的MCI命令解释器的驱动程序。

4)AVIFILE.DLL:

包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件。

5)压缩管理器(ICM):

用于管理的视频压缩/解压缩的编译码器(Codec)。

6)音频压缩管理器ACM:

提供与ICM相似的服务,适用于波形音频。

因为VFW软件开发包是Windows操作系统自带的文件,所以在VisualC++中开发视频采集程序时,需要把VisualC++这个编程工具自带的VFW32.lib文件加入到我们的开发工程中,并且包含头文件vfw.h,从而通过VFW32.lib文件来访问和使用VFW软件开发包里的API函数。

3系统设计

3.1系统模块设计

为了满足用户对照相功能的相关要求,本组件需要具有以下的相关功能模块,如图2所示:

图2功能模块图

3.2组件设计

对于ActiveX控件来说,它的底层是通过COM组件来实现的。

在组件设计时,通过MFC的MFCActiveXControlWizard来开发的一个名为Vfw的控件。

1)生成的控件中,提供了三个类:

CVfwApp类:

该类继承自COleControlModule类,COleControlModule类继承自CWinApp类,因此CVfwApp类相当于一个应用程序类。

CVfwCtrl类:

该类继承自COleControl类,COleControl类继承自CWnd类,它继承了Windows窗口的所有功能,并且该类还提供了方法、事件以及属性等其他的功能。

因此CVfwCtrl类可以看作是一个窗口类。

该类提供了OnDraw函数用于重绘,在其头文件中提供了消息映射、调度映射、事件映射。

调度映射提供了一种机制,让外部的应用程序访问控件的属性和方法。

事件映射让控件能够向包含它的容器发送事件通知。

CVfwPropPage类:

它由COlePropertyPage类派生而来,COlePropertyPage类用来显示一个自定义控件的属性,它继承自CDialog类,因此CVfwPropPage类可以看作是一个对话框类。

接口:

本控件提供了如下两个接口,_DVfw接口和_DVfwEvents接口。

接口用于外部应用程序和控件进行通信,外部的应用程序通过接口所提供的方法去访问控件的属性和方法,接口所提供的函数都是纯虚函数,这些函数的实现都是在CVfwCtrl类中实现的。

MFC通过底层封装使CVfwCtrl类继承自_DVfw这个接口,所以当通过接口调用函数,实际上是调用CVfwCtrl中真正实现的函数。

2)在工程解决方案中加入已编译好的VideoCapture项目,便于把VideoCapture项目中的方法及其定义等加入到CVfw控件中。

把在软件编程中用来实现视频捕获和视频文件保存及图片保存等功能的函数,复制到CVfwCtrl.cpp文件中的CVfwCtrl消息处理程序后面,把软件编程中的成员变量和方法定义复制到VfwCtrl.h中。

3)在控件接口中添加方法:

在_DVfw接口中添加SetVideoParam,并把它的内部方法命名为IntervalSetVideoParam,这样将在CVfwCtrl头文件中生成该方法的定义并在CVfwCtrl类中生成IntervalSetVideoParam函数,在函数里面添加this->SetVideoSource(),以调用SetVideoSource()方法,实现对视频的参数设置,如亮度、色调、对比度等。

在_DVfw接口中添加SetResolution,并把它的内部方法命名为IntervalSetResolution。

这样将在CVfwCtrl头文件中生成该方法定义并在CVfwCtrl类中生成IntervalSetVideoParam函数,在函数里面添加this->SetVideoFormat(),以调用SetVideoFormat()方法,以实现对分辨率的调整。

在_DVfw接口中添加CaptureAviVideo,并把它的内部方法命名为IntervalCaptureAviVideo,这样将在CVfwCtrl头文件中生成该方法定义并在CVfwCtrl类中生成IntervalCaptureAviVideo函数,在函数里面添加this->SaveAvi(bStop),以调用SaveAvi()方法,实现对捕获视频流的avi文件保存。

在_DVfw接口中添加TestCaptureImage方法,并把它的内部方法命名为TestCaptureImage,这样将在CVfwCtrl头文件中生成该方法定义并在CVfwCtrl类中生成TestCaptureImage函数,在函数里面添加如下代码:

this->m_StartPoint.x=rc.left;

this->m_StartPoint.y=rc.top;

this->m_EndPoint.x=rc.left+300;

this->m_EndPoint.y=rc.top+200;

通过它们实现图片坐标点的定义,然后添加代码:

this->CaptureImage();调用CaptureImage()方法,实现图片的捕获。

3.3视频抓取 

视频抓取的基本流程如图3所示:

图3视频抓取图

1)创建视频捕获窗口

this->m_hCapture=:

:

capCreateCaptureWindow("videocapture",WS_CHILD|WS_VISIBLE,this->m_rc.left,this->m_rc.top,this->m_rc.Width()/5*4,this->m_rc.Height(),this->m_hWnd,CHILD_INDEX);

m_hCapture为返回的捕获窗口的句柄,其他操作均对该捕获窗口进行。

2)连接视频捕捉设备

将捕获窗口与第DEVICE_INDEX号视频采集设备关联:

capDriverConnect(this->m_hCapture,DEVICE_INDEX);//DEVICE_INDEX在资源头文件中定义;

3)获取视频采集设备

获取视频采集设备的能力,获取捕获窗状态、视频格式:

capDriverGetCaps(this->m_hCapture,&this->m_CapDriverCaps,sizeof(CAPDRIVERCAPS));

capGetStatus(this->m_hCapture,&this->m_CapStatus,sizeof(CAPSTATUS));

capGetVideoFormat(this->m_hCapture,&this->m_bitmap,sizeof(BITMAPINFO));

4)获取并设置捕获控制参数

capCaptureGetSetup(this->m_hCapture,&this->m_CapParam,sizeof(CAPTUREPARMS));//返回捕获的当前设置;

m_CapParam.dwRequestMicroSecPerFrame=66667;//帧速率,66667为默认值,即10^7/66667=15帧每秒;

m_CapParam.fYield=true;//true为流的捕获产生一个独立的后台线程;

m_CapParam.fCaptureAudio=false; //false不保存音频;

m_CapParam.fAbortLeftMouse=false;//不中止流的捕获;

m_CapParam.fAbortRightMouse=false;//不中止流的捕获;

m_bRet=capCaptureSetSetup(this->m_hCapture,&this->m_CapParam,sizeof(CAPTUREPARMS));//视频流捕获的配置参数设置;

5)启动视频捕获与预览

m_bRet=capPreviewRate(this->m_hCapture,DEVICERATE);

capOverlay(this->m_hCapture,TRUE);

6)终止捕捉并断开与采集设备的连接

capCaptureStop(this->m_hCapture);

capSetCallbackOnFrame(this->m_hCapture,NULL);

capDriverDisconnect(this->m_hCapture);

3.4对捕获的视频流的处理

1)对视频源的控制

通过capDlgVideoSource函数实现对视频参数的控制,如改变色调、对比度、亮度等,从而在将图像加到帧缓冲区以前修改视频的质量。

其代码如下:

capDlgVideoSource(this->m_hCapture);

2)对分辨率的控制

通过capDlgVideoFormat函数对分辨率进行控制,其代码如下:

capDlgVideoFormat(this->m_hCapture);

3)保存视频流到avi文件,其基本流程如图4所示:

图4保存视频图

capDlgVideoCompression(this->m_hCapture);//确定对视频压缩方式的选取。

通过capFileSetCaptureFile方法把存储在字符串缓冲区中的文件名存储到内部结构。

代码如下:

capFileSetCaptureFile(this->m_hCapture,str.GetBuffer(MAX_PATH));

通过CreateThread建立一个线程,dwCreationFlags的值为CREATE_SUSPENDED,使线程并不马上运行:

CreateThread(NULL,0,SaveAsAviFileFun,this,CREATE_SUSPENDED,NULL);

要使线程启动,使用如下语句:

ResumeThread(hSaveFile)SaveAsAviFileFun

线程启动后,通过CreateThread中的参数SaveAsAviFileFun,调用SaveAsAviFileFun函数,启动对视频音频流的捕获到文件,其代码为:

capCaptureSequence(pDlg->m_hCapture);

在文件保存完成后,通过下面代码结束对文件的保存capCaptureStop(pDlg->m_hCapture);

CloseHandle(hSaveFile);关闭线程句柄。

3.5图片处理

3.5.1BMP图像文件格式

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在W

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2