VC++中利用AVICAP.DLL实现图像采集

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:d452490001
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:图像采集是图像处理中比较关键的技术,在图像处理、计算机视觉和视频技术中有着重要的应用。通过具体的实例,阐述了在VC++中利用AVICAP.DLL实现图像采集的方法和技巧。
  关键词:VC++;AVICAP.DLL;图像采集
  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)16-31133-02
  Realizing Image Acquisition with AVICAP.DLL in VC++
  REN Minlgj-hong
  (Department of Computer Science & Technology,Shanxi University of Technology, Hanzhong 723003,China)
  Abstract:Image acquisition is very critical technology in image processing.It has important applications in image processing, computer vision and video technology. In this paper,some skills and method of realizing image acquisition with AVICAP.DLL in VC++ are described by the example.
  Key words:VC++;AVICAP.DLL;image acquisition
  
  在当今社会,图像处理有着广泛的应用,智能交通系统、停车场智能收费系统、机器人等都离不开图像处理。图像采集是图像处理中比较关键的技术,也是图像处理中重要的一个步骤,只有经过图像采集,图像处理才能得到处理对象。
  
  1 AVICAP.DLL
  
  AVICAP.DLL是微软公司提供的用于视频采集的动态链接库文件,其中定义了视频采集的函数。AVICAP.DLL支持实时的视频流采集和单帧采集并提供对视频源的控制。利用AVICAP.DLL可以方便地编写视频和图像采集程序。
  在AVICAP.DLL中定义了如下的接口函数:
  (1)创建视频采集窗口函数
  HWND WINAPI capCreateCaptureWindowA (
  LPCSTR lpszWindowName,
  DWORD dwStyle,
  int x, int y, int nWidth,
  int nHeight,
  HWND hwndParent, int nID);
  其中,参数lpszWindowName指明窗口的名称,参数dwStyle指明窗口的风格,参数x、y、nWidth和nHeight指明窗口的位置和大小,参数hwndParent指明父窗口的句柄,参数nID指明窗口标识。
  在AVICAP.DLL中还定义了一个创建视频采集窗口函数,是capCreateCaptureWindowW,其函数原型与capCreateCaptureWindowA相同,它们的区别是前一个函数用于ANSI字符编码方式下,而后一个函数用于UNICODE字符编码方式下。在头文件VFW.H中用条件编译和宏定义统一为capCreateCaptureWindow。
  (2)取得视频采集设备描述信息函数
  BOOL WINAPI capGetDriverDescriptionA (UINT wDriverIndex,LPSTR lpszName,
  int cbName,LPSTR lpszVer, int cbVer);
  其中,参数wDriverIndex指明设备的索引号,参数lpszName指明设备的名称缓冲区的地址,参数cbName指明设备的名称缓冲区的大小,参数lpszVer指明设备的描述缓冲区的地址,参数cbVer指明设备的描述缓冲区的大小。
  同样,在AVICAP.DLL中还定义了一个取得视频采集设备描述信息函数,是capGetDriverDescriptionW,它们的区别也是使用于不同的编码方式下。在头文件VFW.H中统一为capGetDriverDescription。
  
  2 实现原理
  
  用AVICAP.DLL实现图像采集,首先要用函数capCreateCaptureWindowA创建一个视频采集窗口,然后向视频采集窗口发送相应的消息,实现视频设备的连接、回调函数设置、预览比例和速率设置、预览和叠加模式的设置、图像文件设置等操作。如果以上操作成功,就可以通过视频设备采集图像了。回调函数由程序员编写,用于特殊的视频采集中,例如,在视频会议中用回调函数将采集的视频和音频实时地传递到远程计算机中。
  在VC++中,头文件VFW.H中不仅包含了AVICAP.DLL中函数的原型定义,还定义了与视频采集有关的数据结构、消息和发送消息的宏。利用这些函数、数据结构、消息和发送消息的宏可以方便地编写图像采集程序,如果要对采集的图像实时处理,可以通过编写回调函数实现。
  
  3 实例分析
  
  为了说明实现的方法和技巧,笔者采用USB接口的摄像头作为视频采集设备,在VC++6.0中以实现采集一副图像为例说明。
  在VC++6.0中创建一个基于MFC的单文档应用程序,工程名为“Video”,按照以下步骤完成:
  (1)在VideoView.h的首部加入语句:
  #include "Vfw.h"
  (2)在VideoView.h中对类CVideoView加入私有成员变量Hwndcap:
  private:
  //视频采集窗口的句柄
  HWND Hwndcap;
  (3)在Resources面板中单击“Menu”,双击“IDR_MAINFRAME”,添加菜单项“采集”。在“采集”下加入子菜单项“采集图像”和“保存BMP”,它们的ID分别设为“ID_CAP_BMP”和“ID_SAVE_BMP”。
  (4)在MFC ClassWizard中,选择“Message Map”选项卡,在下拉列表框“Class name”中选择“CVideoView”,在列表框“Object IDs”中选择“ID_CAP_BMP”,在列表框“Messages”中选择“Command”,单击“Add Function”按钮添加成员函数OnCapBmp(),按照同样方法为“ID_SAVE_BMP”响应消息“Command”添加成员函数OnSaveBmp()。再按照同样方法为“CVideoView”响应消息“WM_SIZE” 添加成员函数OnSize()。
  (5)在类“CVideoView”的构造函数中加入:
  Hwndcap=NULL;
  (6)在类“CVideoView”的成员函数OnCapBmp()中加入以下代码:
  CRect WRect;
  //取得主窗口客户区域的位置和大小
  GetClientRect(&WRect);
  //创建视频采集窗口
  Hwndcap=capCreateCaptureWindow(
  (LPSTR) "采集图像",
  WS_CHILD|WS_VISIBLE,
  0,25,
  WRect.Width(),WRect.Height(),
  AfxGetMainWnd()->m_hWnd,
  (int)0);
  if(Hwndcap)
  {
  //连接视频采集设备
  if(capDriverConnect(Hwndcap,0))
  {
  //设置视频预览图像的大小
  capPreviewScale(Hwndcap,1);
  //设置视频预览的速率
   capPreviewRate(Hwndcap,66);
  //设置视频以预览模式显示
  capPreview(Hwndcap,1);
  }
  else
  {//显示错误信息
  MessageBox("摄像头未准备好!","提示信息",MB_OK|MB_ICONERROR);
  //撤销视频采集窗口
  ::DestroyWindow(Hwndcap);
  Hwndcap=NULL;
  }}
  (7)在类“CVideoView”的成员函数OnSaveBmp ()中加入以下代码:
  if(Hwndcap)
  //将当前帧保存为位图文件
  capFileSaveDIB(Hwndcap,"test.bmp");
  else
  MessageBox("请先采集图像!",
  "提示信息",
  MB_OK|MB_ICONERROR);
  (8)在类“CVideoView”的成员函数OnSize ()中加入以下代码:
  CRect WRect;
  //取得主窗口客户区域的位置和大小
  GetClientRect(&WRect);
  //设置视频采集窗口的位置和大小
  ::SetWindowPos(Hwndcap,
  NULL,
  0,25,
  WRect.Width(),
  WRect.Height(),
  SWP_NOZORDER);
  (9)打开“Project Settings”对话框,选择“Link”选项卡,在“Object/library modules”中输入“vfw32.lib”。
  以上各步完成后,经过编译和连接生成可执行文件“Video.exe”。运行“Video.exe”,单击菜单项“采集/采集图像”,结果如图1所示。
  程序中的capDriverConnect等是头文件“Vfw.h”中定义的宏,这些宏实质是向视频采集窗口发送相应的消息,由于篇幅所限,这里对这些宏和消息的定义不作介绍,读者可参阅VC++中的头文件“Vfw.h”。
  
  5 结束语
  
  在VC++中利用AVICAP.DLL实现图像采集简单,编程代码量少,程序员编写回调函数可以实现特殊需求的图像采集,不过,对于一般要求的图像采集不需要编写回调函数。
  图1 程序运行结果
  
  参考文献:
  [1]赵军,平西建,肖永隆.视频信号的捕获采集编程[J].信息工程大学学报,2001,2(4):46-49.
  [2]张弋,何晓,李艳军.多媒体信息捕获在Win32编程中的实现[J].计算机工程,2002,28(2): 205-207.
  [3]张元.基于AVICap窗口类的视频监控及捕捉的实现[J].电脑知识与技术,2004,(14):7-9.
  [4]阮林波,曹锦云. 基于USB摄像头的自动监控系统[J].计算机工程与设计,2004,25(6):988-989.
其他文献
摘要:状态在网格计算中是一个重要的概念,WSRF的出现为网格应用系统的状态管理问题提供了标准的方法,而GT4则完全实现了WSRF。本文介绍了Web服务、状态和WSRF,以及他们之间的关系。介绍了GT4平台和WSRF核心:WS-Resource。通过相关的实例,探讨了利用GT4实现基于WSRF的Web服务的过程。  关键词:Web服务;状态;WSRF;GT4  中图分类号:TP393文献标识码:A文
期刊
摘要:隐马尔可夫模型(HMM)已经被证明是一个对系统正常行为建模的好工具,但是它的Baum-Welch训练算法效率不高,训练过程需要很大的计算机资源,在实际的入侵检测中效率是不高的。本文提出了一个高效的用多观察序列来训练HMM的训练方案,我们的实验结果显示我们的训练方法能比传统的训练方法节省60%的时间。  关键词:入侵检测,异常入侵检测,隐马尔可夫模型, Baum-Welch 算法  中图分类号
期刊
摘要:分析了Web服务应用在E-Learning中存在的问题和解决方案,说明利用Web服务可以解决E-Learning发展过程中存在的一系列问题,实现了E-Learning学习资源和系统功能的分布式存储、发现、共享和重用以及动态交换内容,使系统更加灵活和个性化。  关键词:Web服务;E-Learning;应用  中图分类号:G434文献标识码:A文章编号:1009-3044(2007)16-30
期刊
摘要:VoWLAN是当前研究的热点,VCFCA机制有效地提高了VoWLAN的容量。如果对VCFCA做适当的改进,则VCFCA能适应VBR,并增强了鲁棒性。  关键词:Voice over WLAN ;VCFCA;VBR  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)16-30989-02  VCFCA Oriented to VBR  MA Sheng-zheng1
期刊
摘要:计算机网络调查是一种新兴的信息收集和处理方式,具有传统调查方式所不具备的很多优势,但也存在很多缺陷和局限性。文章从理论和实践上对网络调查的优势和劣势以及适用范围进行了论述,以期使这种调查方式正确地在实践中加以应用。  关键词:网络调查;局限性;适用范围  中图分类号:TP393 文献标识码:A文章编号:1009-3044(2007)16-30991-02  The Strengths & W
期刊
摘要:介绍一种基于gm/ID 参数特性的模拟电路优化设计方法,并以CMOS密勒补偿运算放大器的设计为例具体阐述该方法的基本设计步骤。该方法以统一的gm/ID与ID/(W/L)的关系曲线为基本设计出发点,综合电路的其它设计要求,而提出的一种优化性能指标的设计思路。对所设计的运算放大器模拟仿真验证了这种方法的有效性。  关键词:运算放大器;CMOS;gm/ID  中图分类号:TN432文献标识码:A文
期刊
摘要:用MATLAB程序演示了任意长度的通电螺线管产生的磁感应强度的截面分布图,结合图像分析了通电螺线管周围磁感应强度的特点。将多媒体与物理教学相结合,提高教学效果,培养学生的学习兴趣。  关键词:MATLAB;通电螺线管;磁感应强度物理教学  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)16-31119-02  The Simulation Experiment
期刊
摘要:模式匹配在整个说话人识别系统中具有重要的作用,其采取的方法将直接影响系统的识别率。本文介绍了一种模糊矢量量化(FVQ)方法,通过对模糊C均值(FCM)聚类算法的分析,提出了基于减法聚类和改进的模糊C均值聚类算法相结合的说话人识别方法,实验表明该方法提高了识别率,是一种行之有效的说话人识别方法。  关键词:说话人识别;模式匹配;FCM  中图分类号:TP18 文献标识码:A文章编号:1009-
期刊
摘要:移动ad hoc 网络由于其动态拓扑、无线信道以及各种资源有限的特点,特别容易遭受拒绝服务(DOS) 攻击。在分析传统防御机制的基础上,提出了移动ad hoc 网络中一种新的DOS 攻击防御机制——基于优先级和缓存控制,着重保护节点的资源。  关键词:移动ad hoc 网络;路由协议;网络安全;拒绝服务;资源  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)16
期刊
摘要:利用Chemsketch可方便构造出分子和晶体等的三维模型,以正十二面体为例,介绍了三维动态模型的绘制方法和生动形象地表达其结构的方法。  关键词:Chemsketch;分子;晶体结构  中图分类号:TP302.4 文献标识码:A文章编号:1009-3044(2007)16-31130-01  Application of Chemsketch in Three-dimensional Sp
期刊