基于VB 6.0下的对网络摄像头视频捕捉

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:gaochuwuyu
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:随着通信技术与多媒体技术的飞速发展,以多媒体视频为主的应用得到了广阔的发展,在这些视频应用领域中,若想进行图像处理就要先进行视频捕获。鉴于此,文章对Windows系统下的VFW体系结构进行了论述、给出了视频开发的相关Windows API函数,分析了视频捕获的工作流程;并用VB来设计和实现视频捕捉程序,具体的给出了程序的代码,最后给出了测试结果,证明是可以捕捉的。
  关键词: VFW;视频捕捉; Windows API;AVICap
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)15-3854-02
  Video Capture of Network-vidicon Based on VB6.0
  WANG Hai-feng, ZHANG Yi
  (Information and Educational Technique Center, Jiangsu Teachers University of Technology, Changzhou 213001,China)
  Abstract:With the rapid development of communication and multimedia technique,the application of the multimedia video got a broad development,in the domain of video application,suppose to carry on image manipulation, must first implement the video capture. Consequently, the article has carried on the elaboration to VFW system structure under the Windows system, has produced Windows API function about video capture, has analyzed the working process of the video capture; video capture programme has been designed and implement with VB,programme code has been produced.Finally,the result of video capture is feasible.
  Key words:VFW;video capture;Windows API function;AVICap
  
  1 引言
  
  1992年,Microsoft公司发布了Video for Windows(以下简称VFW),使得任何PC机都能在无特定硬件支持的条件下播放视频画面。它以纯软件的方式从模拟视频源采集数字视频信号并将其存储到文件中或直接对视频缓存进行处理。
  VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩,它引进了AVI (Audio VideoInterleave)文件标准,规定了视频和音频数据以交织的方式进行存储。这种按交替方式组织视频和音频数据的方式可使得读取视频数据流时能更有效地从存储媒介得到连续的信息。
  Windows本身包括了VFW,当用户在安装Windows时,安装程序会自动地安装配置视频所需的视频组件,如设备驱动程序、视频压缩程序等。
  在VFW开发包中自带了一个视频捕捉的工具vidcap,它使用了VFW视频捕捉模块AVICap的大量API (Application Program Interface,应用程序接口)函数实现实时的视频捕捉。
  
  2 VFW体系结构
  
  VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕捉、视频压缩及播放功能。VFW体系结构如图1所示。
  VFW主要由六个模块组成:
  (1)AVICAP.DLL:它主要实现视频捕捉功能。它包含了用于视频捕捉的函数,为AVI文件输入输出和视频、音频设备驱动程序提供一个高级接口。
  (2)MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作,能够将视频捕捉窗口与捕捉驱动设备连接起来,支持ICM视频编码服务。
  (3)MCIAVI.DRV:它包含了对VFW的MCI命令解释器,实现回放功能。
  (4)AVIFILE.DLL:支持由标准多媒体I/0函数提供的更高的命令来访问AVI文件。
  (5)ICM( Installable compression manager):即压缩管理器,提供对存储在AVI文件中视频图像数据的压缩、解压缩服务。
  (6)ACM( Audio Compression Manager):即音频压缩管理器,提供与ICM相似的服务,不同之处是它适用于波形音频。
  Microsoft的Visual Basic支持VFW,在此开发平台上,可通过多媒体控制接口实现与声音、视频等多媒体信息打交道,开发出多媒体应用程序。
  图1 VFW体系结构图
  
  3 基于VFW下VB视频捕捉
  
  3.1VFW视频捕捉模块AVICap窗口类常用的数据结构
  在利用AVICap编程时,常常要用到与视频捕捉相关的结构。下面对常用的4个结构作以简要介绍,对于前3个结构都有对应的函数来设置和获得结构包含的信息。
  (1)CAPSTATUS:定义捕捉窗口的当前状态;
  (2)CAPDRIVERCAPS:定义捕捉设备的能力,如:有无预览能力,有无控制视频源,视频格式的对话框等;
  (3)CAPTUREPARMS:包含控制视频流捕捉过程的参数,如捕捉帧频,指定键盘或鼠标键以终止捕捉,捕捉时间限制等;
  (4)VIDEOHDR:定义视频数据块的头信息。在编写回调函数时常用到其数据成员1pData(指向数据缓存的指针)和dwBufferLength(数据缓存的大小)。
  3.2VFW视频捕捉的工作流程
  利用VB进行视频捕捉的设计需要遵循如图2程序流程:
  3.3 Windows API视频相关函数
  在用VB6.0进行视频捕捉的时候需要用到Windows API 视频相关函数,第一个是建立视频窗口的函数
  Declare Function capCreateCaptureWindow Lib "avicap32.dll" _Alias "capCreateCaptureWindowA" _(ByVal lpszWindowName As String, _ByVal dwStyle As Long, _ByVal x As Long, _ByVal y As Long, _ByVal nWidth As Long, _ByVal nHeight As Long, _ ByVal hwndParent As Long, _ ByVal nID As Long) As Long其中第一个参数lpszWindowName表示窗口名,参数x、y、nWidth、nHeight分别描述窗口的位置和大小信息,hwndParent表示其父窗口的句柄,最后一个参数nID为窗口ID。函数返回值为新创建的捕捉窗口句柄。
  图2 视频捕捉工作流程
  第二个为摄像头信息的提取,用于查找系统中有几个可用的摄像头:
  Declare Function capGetDriverDescription Lib "avicap32.dll" _Alias "capGetDriverDescriptionA" _ (ByVal dwDriverIndex As Long, _ByVal lpszName As String, _ByVal cbName As Long, _ByVal lpszVer As String, _ ByVal cbVer As Long) As Long参数dwDriverIndex表示需要返回的摄像头索引号,lpszName 为摄像头名称lpszVer 为版本信息。
  第三个是消息发送函数,用于软件和系统摄像头之间的消息发送,本此设计捕捉中用的是下面这个消息来发送数据:
  Declare Function SendMessageAsLong Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, _ByVal wMsg As Long, _ ByVal wParam As Long, _ByVal lParam As Long) As Long
  其中hWnd为创建的捕捉窗口句柄,wMsg为消息,也就是说告诉系统中VFW需要做什么。
  
  4 视频捕捉的设计与实现
  
  利用VFW技术实现视频的捕捉主要是通过调用其视频捕捉模块AVICap. dll创建AVICap窗口类,并借助窗口类中的结构、回调函数以及宏函数来完成。而本次的视频捕捉是运用系统消息函数向捕捉窗口发送消息来建立捕捉窗口与捕捉设备的联系的。捕捉之前我们首先要安装上网络摄像头,下面将给出VB捕捉的具体程序代码,并配上注解。
  VB视频捕捉的程序代码如下:
  Option Explicit
  Dim hCapWnd As Long‘设置捕捉窗口句柄
  Private Sub Form_Load()
  Dim Messagepram As Long‘设置发送消息参数
  Dim x As Long
  Dim y As Long
  x = Form1.Height
  y = Form1.Width
  hCapWnd = capCreateCaptureWindow("视频捕捉", WS_CHILD Or WS_VISIBLE, 0, 0, x, y, Me.hWnd, 0),创建的窗口能足够显示摄像头的内容 If 0 = hCapWnd Then '当无法创建窗口时,出现提示
  MsgBox "不能建立视频捕捉窗口", vbCritical, "视频捕捉"
  Exit Sub
  End If
  ‘发送与摄像头设备连接的消息
  Messagepram = SendMessageAsLong(hCapWnd, WM_CAP_DRIVER_CONNECT, 0, 0)
  ‘通过消息设置帧频,默认为15帧/秒
  Messagepram = SendMessageAsLong(hCapWnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
   ‘通过消息发送“开始向捕捉窗口发送画面”
  Messagepram = SendMessageAsLong(hCapWnd, WM_CAP_SET_PREVIEW, 1, 0)
  End Sub
  Private Sub Form_Unload(Cancel As Integer)‘退出程序时关闭捕捉
  Dim CAPstop As Long
  CAPstop = SendMessageAsLong(hCapWnd, WM_CAP_STOP, 0, 0)
  End Sub
  上述程序只是反映了视频如何捕捉的过程,对捕捉下来的视频运用AVIFILE 来对视频进行存盘操作,下面是视频捕捉的截图。
  图3 VB视频捕捉
  
  5 结束语
  
  运用Windows系统下的VFW来开发一些视频应用软件,可以开发出适合自己软件要求的产品,但是它所捕捉的视频是AVI文件的,是占用空间比较大,如果要在网络上将捕捉下的视频进行远程传输,需要编写压缩代码进行压缩后才能。
  
  参考文献:
  [1]申华.基于Windows环境下视频捕捉技术的研究及应用[D].辽宁:大连海事大学,2005.
  [2]曹衍龙.Visual Basic系统开发实例精粹[M].北京:人民邮电出版社,2005:183-198.
  [3]贝雷,王敏.用VideoforWindows实现视频捕捉[J].系统工程,2000,18(6):63-65.
  [4]琚章锋,刘娟.利用VFW进行视频开发[J].电脑开发与应用,2004,17(7):20-22.
  [5]陈珲,张会汀,周杰华.利用VFW实现实时视频捕捉及其应用[J].计算机应用,2003,23(8):141-143.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:在H.264/AVC中,采用帧内预测来提高帧内编码的效率,色度块尺寸为8×8,亮度块包括4×4和16×16两种尺寸。其中,色度块8×8有4种预测模式,亮度块16×16有4种预测模式,而亮度块4×4有9种预测模式,这么多模式选择大大增加了编码的复杂性。文中介绍一种基于RDO的单阈值快速算法和一种基于RDO的双阈值快速算法,并阐述了两种算法在性能上的优越性。  关键词:H.264/AVC;帧内预
期刊
今天星期几?这个问题每个人可能都问过N遍。对于正常上下班的人来说。因为惦记着“大礼拜”的到来,可能记的非常准确,张嘴就来。但对于不定期加班或轮休的人,你再问他星期几时,可能会有很多人搞错。其实成天面对装着XP系统的电脑工作的我们,只要把它的时间设置一下,就能轻松查看星期几了。  在控制面板中双击“日期、时间、区域与语言选项”,在打开的“区域和语言选项”的窗口中点击“自定义”按钮,再在打开的“自定义
期刊
方法一:普通键盘的休眠两招    如果你的键盘是普通键盘,上面没有带有休眠按钮,这时要想让系统进入休眠,怎么操作呢?  1 快速休眠  单击“开始”按钮,再按住“Shift”键的同时单击“关闭”按钮即可在打开的窗口中显示“休眠”按钮,再单击之即可进入休眠了。  2 直接休眠  上面的方法使用已经比较简单了,但还有些朋友不满足,不想每次都得按“Shift”键,这时,通过下面的方法直接将“休眠”按钮添
期刊
我们在用WPS 2005编辑科学文档的时候,经常要输入各种公式。你有没有想过让这些公式用不同的色彩显示以更方便我们辨认呢?  在WPS中插入公式并不困难,只要点击菜单命令“插入-对象”,在打开的“插入对象”对话框中点击左侧的“新建”单选项,然后在右侧的列表中选择“Mi-crosoft公式3.0”,确定后就可以调用Word的公式编辑器进行公式编辑了。默认的情况下,输入的公式都是黑色字体。但是,如果我
期刊
在学校工作的我经常在一些表格中输入星期一、星期二……,如课程表、值班表、备忘录等。然而次数一多就不太情愿了……  于是我找到了Word中的“项目符号和编号”功能。但它却不认识星期几。在没有其它办法的情况下,只能再次对“项目符号和编号”下手,几经折腾,终于让Word中的编号也能认识星期几了。  1 单击“格式”-“项目符号和编号”,在“项目符号和编号”对话框中选择“编号”选项卡,随便选择一种编号方式
期刊
你是否遇到过在Word中处理文字时需要计算一些数据的情况呢?你是不是还要拿起手中的计算器或者借助于系统附件中的“计算器”来计算呢?  你想过利用Word也可以进行计算吗?哈哈,Word还真有快速计算能力。并且其功能要远远强于你的“计算器”,下面我们就来看一下在Word中进行数值计算的两种方法。    “Ctrl+F9”法  例如要计算“1140+3215-1563x219÷101.4+18.9^9
期刊
摘要:在剖析传统家电故障维修方式和需求的基础上,提出了一种基于神经网络和信息融合技术的智能家电故障测控系统的基本框架。该系统不仅能满足不同的智能家电需要不同的QoS保证,而且切实可行。依托该系统,可以提高我国家电企业故障诊断与维修的水平和效率,节省检测和维修成本并使产品具有更大的竞争力。同时,对将人工神经网络和信息融合技术引入到家电维修行业进行有益的探索。  关键词: 神经网络;信息融合;智能家电
期刊
近日,我们有两个网站在同时开发,这就需要不断在两个网站之间切换,每次都要更改网站的主目录。有没有一个方法可以实现利用一台服务器,架设多个网站,都能同时访问呢?经过摸索,终于实现了这个目标。以下是具体的方法。(在Win2000 Sever中+IIS 5.0测试通过)  首先我们需要在WEB服务器建立两个文件夹,用来存放两个网站所需文件,笔者是在“Web服务器”(Web服务器主目录)目录里面建立“Fi
期刊
WPS 2003丰富的边框样式和独到的图文混排功能至今深受广大用户的喜爱,但在处理文档中的图片过程中。有时会遇到一点小麻烦。如插入一幅图片后。右键单击图片在弹出的快捷菜单中左键单击“叠放次序”-在文字下。就可以把图片置于文字之下。做成简单的水印效果。  但我们在完成文档中的其它操作后,返回头来想调整图片的位置及“水印”效果(对比不明显示,主次不分)时。却发现图片不让动了。如果进行的其它操作步骤较少
期刊
酷暑又到了,你的电脑是否又开始挥泪如淋?过高的温度给自己心爱的电脑造成额外的负担,CPU太热的话,会导致机器运行不稳定甚至是电脑配件的烧毁,而CPU作为整个电脑的重中之重,所以也一直受到大家普遍的关注。如何在酷暑让电脑轻松的工作,这才是每个电脑用户首先要做的事,对于电脑用户而言,应该了解CPU散热器的选购要决。    散热的重要性    为什么要散热,这很显然是电脑配件的发热太高,导致温度急速上升
期刊