Computer Science and Application
Vol.4 No.04(2014), Article ID:13429,8 pages DOI:10.12677/CSA.2014.44012

VFW在智能视频图像采集系统中的实际应用

Guangli Zhuang, Shufen Chen, Guanyi Wang

Beijing Institute of Technology, Zhuhai, Zhuhai

Email: ocean@cubietech.com, 474922006@qq.com, 470917709@qq.com

Copyright © 2014 by authors and Hans Publishers Inc.

This work is licensed under the Creative Commons Attribution International License (CC BY).

http://creativecommons.org/licenses/by/4.0/

Received: Mar. 24th, 2014; revised: Apr. 10th, 2014; accepted: Apr. 20th, 2014

ABSTRACT

In view of flawed visual problem of the remote video conference and visual video conference, a new technique which is based on VFW uses the developed tools of the Visual Studio 2010 to develop the intelligent video image acquisition system. As a result of the exhaustive analysis of the graphics device interface function which is used in the Real-time processing area, it achieves the goal which is to collect the video image information of the visual video conference. Therefore, based on the above, we can achieve the goal which is to develop the visualization of high-definition video conference capture software.

Keywords:Remote Video Conference, VFW, Intelligent Video Image, Real-Time Processing, Visualization, High Precision

VFW在智能视频图像采集系统中的实际应用

庄广利,陈淑芬,王冠一

北京理工大学珠海学院,珠海

Email: ocean@cubietech.com, 474922006@qq.com, 470917709@qq.com

收稿日期:2014年3月24日;修回日期:2014年4月10日;录用日期:2014年4月20日

摘  要

针对远程视频会议及可视化视频会议存在缺陷的直观问题,提出一种基于VFW (Video for Windows)技术并利用Visual Studio 2010开发工具开发智能视频图像采集系统.详细分析了实时处理中用到的图形设备接口函数并最终实现远程可视化智能会议视频图像信息的采集。并在以上基础上实现了可视化的高精度视频会议采集软件。

关键词

远程视频会议,VFW,智能视频图像,实时处理,可视化,高精度

1. 引言

现如今社会,可视化会议视频的实时采集和存储,对视频帧信号的实时处理、目标信息的检测和识别等非常重要,在日常生活、工业生产及军事活动等领域有着广泛的应用和需求。目前,CCD摄像头被广泛地使用在交通、遥感非接角上式工业控制、光学图像处理、目标跟踪等领域,因此针对目前通用电子设备的发展,本文利用摄像头和USB接口设计了一个结构简单、通用性强的实时图像采集系统,软件设计基于VFW技术和Visual Studio 2010开发工具实现[1] 。视频会议系统(Video Conference)是指两个或两个以上不同地方的个人或群体通过传输线路及多媒体设备,将声音,影像及文件资料互传,达到及时且互动的沟通。视频会议是集计算机技术,通信技术和多媒体技术于一体的远程异地通信方式。在实际应用中,视频会议能够提高工作效率,降低远距离会议的费用。视频程序可采用MCI(Media Control Interface)或VFW (Video for Windows)开发。MCI为用户提供了高层开发手段,开发人员在开发过程中不需考虑硬件设备细节只需将其当作MCI设备直接操作即可[2] 。但在使用MCI开发程序时,对于媒体设备的操作局限在文件级别上,如视频所对应的AVI文件、音频所对应WAV文件以及MIDI所对应的MID等,而这对于视频采集绝大多数情况是不适合的,而VFW与MCI一样提供硬件无关性,并具有更大的灵活性。

2. 智能视频图像采集及系统架构

通过评估,最终确定选择CCD摄像头USB接口来做外设硬件,系统架构由摄像头以及计算机构成, 如图1所示。所以该系统易于实现性价比较高、通用性强等特点。

本系统基于VFW技术,软件设计应用了Visual Studio 2010开发工具,使用C++语言编程实现[3] 。微软推出数字视频的软件开发工具包。为软件开发人员提供了一个专门用于实现实时视频捕获、剪辑和视频播放的重要工具。该开发包封装了视频应用程序所需的接口函数(API函数),程序可以直接调用VFW的API函数,这样就大大简化了程序员开发基于Window的视频应用程序的工作,提高了开发效率。VFW主要由6个模块组成,其中的AVI Cap.DLL用于视频捕捉[4] 。AviCap.DLL中提供了基于消息接口的、功能强大而简单易行的窗口类AVICap,本系统的图像捕捉程序主要使用了这个窗口类。通过Avlcap程序可以访问视频硬件并控制视频流的捕获,它能直接访问视频缓冲区,不需要生成中间文件,实时性强,效率高[5] 。

3. 智能视频图像采集实现

3.1. 视频捕获流程

视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。捕获

Figure 1. Intelligent video image acquisition system totality design

图1. 智能视频图像采集系统总体设计

VFW视频的基本流程如下:

1) 建立捕获窗口

通过AVICAP组件函数capCreateCaptureWindow()可以建立视频捕获窗口,它是所有捕获工作及设置的基础[5] 。

2) 登记回调函数

登记回调函数用来实现用户的一些特殊需要。例如在实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就进行处理,以达到实时功效。应用程序可以用捕获窗口来登记回调函数,以便及时处理捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等情况[6] 。

3) 获取捕获窗口的默认设置如图2

通过宏capCaptureGetSetup (hWndCap, &m_Parms, siaeof(m_Parms))来获取欣喜若狂窗口的默认设置。

4) 设置捕获窗口的相关参数如图3

通过宏capCaptureSetSetup (hWndCap, &m_Parms, sizeof(m_Parms))来设置捕获窗口的相关参数。

5) 连接捕获窗口与视频捕获卡

通过宏capDriveConnect(hWndCap, 0)来连接捕获窗口与视频捕获卡。

6) 获取采集设备的功能和状态

通过宏capDriverGetCaps(hWndCap, &m_CapDrvCap, sizeof(CAPDRIVERCAPS))来获取视频设备的功能,通过宏capGerStatus((hWndCap, &m_CapStatus, sizeof(m_CapStatus))来获取视频设备的状态。

7) 设备捕获窗品显示模式

视频显示有Overlay和Preview两种模式。

8) 捕获图像到缓存或文件并做相应处理如图4

需要利用回调机制来实时处理采集的数据,通过capSetCallbackOnFrame(hWndCap, FrameCallbackProc)采集单帧视频;用capSetCallbackOnVideoStream(hWndCap, VideoCallbackProc)采集视频流。通过调用CapCaptureSequence(hWnd)来保存采集的数据;通过调用capFileSetCap-ture(hwnd, Filename)来指定文件名。

Figure 2. Set the video format

图2. 设置视频格式

Figure 3. Set the video parameters

图3. 设置视频参数

9) 终止视频捕获并断开与视频采集设备的连接

通过调用capCatureStop(hWndCap)停止采集,调用capDriverDisconnect(hWndCap)来断开视频窗口与捕获驱动程序的连接。

3.2. 视频编辑和播放

利用VFW,不仅可以实时采集视频流,而且还提供了编辑和播放功能,此功能主要通过AVIFILE、ICM、ACM、MCIWnd等组件之间的协作来完成[7] 。

1) 编辑处理AVI视频文件

编辑处理AVI视频文件的基本流程如图5所示。

2) 播放视频

VFW提供了MCIWnd窗口类来播放视频流域,它可以创建视频播放区,控制并修改MCI窗口当前加载媒体的属性。一个由函数、消息和宏组成的库与MCIWnd相关联,通过它们可以操作AVI文件,很方便地使应用程序完成视频播放。

3.3. VCM的视频压缩

视频压缩管理器(VCM)提供了一个访问接口,用于调用操作系统中的视频编码器实现视频压缩[8] 。使用VCM的优点是不用关心具体的压缩算法,通过调用相应的编码器就可以把视频压缩为不同的格式。当应用程序调用VCM时,VCM会把此调用的动作封装到一个消息中,然后通过使用ICSendMessage()函数把此消息改善到适合的压缩器或解压器。VCM接收到压缩器或解压器的返回值后,就把控制返回给应用程序如图6

Figure 4. Hybrid the test window of video

图4. 混合视频测试窗口

Figure 5. The process of editing processing AVI video files

图5. 编辑处理AVI视频文件的流程

Figure 6. The flow chart of VCM video compression

图6. VCM 视频压缩流程图

4. 实现视频图像采集的部分代码

#define XDIM 704                                    //图像宽度,预设的足够大

#define YDIM 576                                    //图像高度,预设的足够大

unsigned char bufo[XDIM*YDIM*3+40];//预显示的图像,RGB格式

HIC             hic1;                            //编码器句柄

HIC             hic2;                            //解码器句柄

LPBITMAPINFO    lpbiIn;                            //输入格式

LPBITMAPINFO   lpbiTmp;//the output format of compressor LPBITMAPINFO    lpbiOut;                //输出格式

COMPVARS        pc;                                   //编码设置结构体

BOOL            IsKeyFrame;           //

BOOL                      bSaveAVI=FALSE;  //

long            FrameSize;                   //

int                             CurrentID;                  //

//UINT                    uiVideoX=0;              //显示图像的宽度

//UINT                    uiVideoY=0;              //显示图像的高度

BOOL                      bPreview=FALSE;    //

int                             nStreamLength;        //

int                             nOstreamSize;  //

CFrameWnd m_wndSource;          //创建的新窗口

HWND           m_hWndCap;                     //VFW设备窗口

CRect             disRect;                       //显示窗口的客户区域

CMainFrame *pMainFrame=NULL;    //MainFrame 指针

enum              VFW_STATE{PREVIEW,ENCDEC};

VFW_STATE        m_vfwState = PREVIEW;

}

/* 对捕获的视频做编码、解码处理 */

void CMainFrame::OnVfwCodec()

{

// TODO: 在此添加命令处理程序代码

DWORD fsize;

/* VCM initialization */

hic1 = ICOpen(mmioFOURCC('v','i','d','c'),  mmioFOURCC('X','V','I','D'),  ICMODE_COMPRESS);

if (hic1 == 0)

AfxMessageBox(_T("打开编码器失败!"));

hic2 = ICOpen(mmioFOURCC('v','i','d','c'),  mmioFOURCC('X','V','I','D'),  ICMODE_DECOMPRESS);

if (hic2 == 0)

AfxMessageBox(_T("打开解码器失败!"));

//   get the format of the input video if (ICCompressGetFormat(hic1,lpbiIn,lpbiTmp)!=ICERR_OK)

AfxMessageBox(_T("编码器不能读取输出格式!"));

if (ICCompressQuery(hic1,lpbiIn,lpbiTmp) != ICERR_OK)  

AfxMessageBox(_T("不能处理编码器输入输出格式!"));

//   set the parameters of the CODEC pc.cbSize         = sizeof(COMPVARS);                           //结构体大小

pc.dwFlags        = ICMF_COMPVARS_VALID;

pc.hic            = hic1;                                               //编码器句柄

pc.fccType        = mmioFOURCC('v','i','d','c');

pc.fccHandler     = mmioFOURCC('X','V','I','D');

pc.lpbiOut        = lpbiTmp;                                        //输出格式

pc.lKey           = 100;                                                        //key帧频率

pc.lQ             = 10000;                                                    //图像质量

if(!ICSeqCompressFrameStart(&pc, lpbiIn))

return;

ICDecompressBegin(hic2,lpbiTmp,lpbiOut);

m_vfwState  = ENCDEC;

}

void CMainFrame::InitAVIWriteOpt()

{

CString filename;

CFileDialog FileDlg(FALSE,_T("avi"));

if (FileDlg.DoModal()==IDOK)

{

filename = FileDlg.GetPathName();

//capGetVideoFormat(m_hWndCap,&m_InInfo,sizeof(m_InInfo));

m_Frame = 0 ;

//AVI文件初始化

AVIFileInit() ;

bSaveAVI = TRUE;

//打开文件

AVIFileOpen(&m_pFile,filename,OF_WRITE | OF_CREATE,NULL);

memset(&strhdr, 0, sizeof(strhdr)) ;

strhdr.fccType    = streamtypeVIDEO;

strhdr.fccHandler = 0  ;

strhdr.dwScale    = 1  ;

strhdr.dwRate     = 25 ;

strhdr.dwSuggestedBufferSize = lpbiIn->bmiHeader.biSizeImage;

SetRect(&strhdr.rcFrame, 0, 0, lpbiIn->bmiHeader.biWidth, lpbiIn->bmiHeader.biHeight);

ps = NULL;

//文件文件流

AVIFileCreateStream(m_pFile,&ps,&strhdr);

//开始捕捉

capCaptureSequenceNoFile(m_hWndCap);

}

}

5. 结论

相比较以前会议电话技术,参会人员彼此只能听到声音的现象,视频会议大大地满足了人们对此方面的需求。为人们提供了一种新型、便捷的交流平台。可视化会议视频的实时采集和存储,对视频帧信号的实时处理、目标信息的检测和识别等在日常生活、工业生产及军事活动等领域有着广泛的应用和需求。智能视频图像采集系统是一种能够替代典型的多媒体会议通信终端,目前、智能视频图像采集系统已经占据了视频会议用户市场,并且智能视频图像采集系统已经在社会性的信息交流中发挥了巨大的沟通作用.智能视频图像采集系统利用视频会议的特性[9] ,通过通信网络把两个或多个地点的多媒体会议终端连接起来,在其间传送各种图像,话音和数据传送,使出席会议的人有身临现场的感觉.在智能视频图像采集系统的世界中,除了用于多点多媒体会议外,智能视频图像的子业务——视频会议系统还用于远程教育,远程医疗等需要传送适时音频,视频和数据的业务 。在实际应用中,视频会议能够提高工作效率,降低远距离会议的费用。可视化会议视频将作为一种新兴的技术为人们所规范采纳与应用。

项目基金

北京理工大学珠海学院“安联锐视”学生创新基金(ALRS08)。

参考文献 (References)

  1. 张琴 (2010) 视频图像采集压缩与网络传输系统的研究与设计. 中北大学, 太原.

  2. 王集成 (2009) 基于VFW图像采集应用. 武汉大学, 武汉.

  3. 张宏林 (2008) 精通Visual C++数字图像处理典型算法及实现.人民邮电出版社, 北京.

  4. 吴众山, 雷蕴奇, 吴绿方 (2008) 一种实用的背景提取与更新算法. 厦门大学学报, 3, 348-350.

  5. 盛大力 (2011) 基于VFW的视频图像采集系统的设计与实现. 电子科技大学, 成都.

  6. 吴志军, 马兰, 沈笑云 (2006) Visual c++视频会议开发技术与实例.人民邮电出版社, 北京.

  7. 潘轶菁, 王妍, 高玲 (2006) MPEG视频分段播放的实现. 微型计算机信息, 3, 312-314.

  8. 孙鑫 (2012) VC++深入详解. 电子工业出版社, 北京.

  9. 艾杰 (2010) 基于VFW技术的实时图像采集系统. 全国第4届信号和智能信息处理与应用学术会议论文集, 2010年10月, 上海.

期刊菜单