基于labVIEW和API的实时视频捕捉
2015-12-02陈希球田有成
陈希球,田有成
(1.长江工程职业技术学院,武汉430212;2.长江中游水文水资源勘测局,武汉430010)
美国国家仪器公司(National Instruments)的软件产品labVIEW,以图形化编程模式更显直观高效,同时又不乏灵活性。其应用范围覆盖工业自动化、测试测量、嵌入式应用、运动控制、图象处理、计算机仿真等众多领域。在图象处理方面,提供了极其丰富的处理与算法分析函数,易于用户构建处理系统,缩短了系统开发周期。由于NI公司提供的图象采集卡价格不菲,构建应用系统时,硬件采用通用图象采集卡,再利用labVIEW强大的软件资源,不失为明智之举,既节省成本,又方便软件设计。
1 调用库节点与相关AIP
1.1 调用库节点
labVIEW的互联接口函数面板中提供了调用库函数节点(CLN),利用CLN可以调用DLL和API函数。在使用CLN节点时,需要利用对话框配置调用环境,包括指定DLL或API对应文件的路径,调用规范应选用stdcall(WINAPI),在线程选项中应选择“在UI线程中运行”选项。不同函数的参数个数和参数数据类型都不尽相同,在配置时要按函数的要求增加相应参数并选择对应的数据类型,在选择数据类型时要注意labVIEW中的数据类型与C语言的对应关系。
1.2 与视频处理相关API
Window提供了实时音视频处理动态链接库avicap32.DLL,可以创建捕捉窗口,并通过向窗口发送消息实现视频捕捉。其相关函数和消息说明如下:
capCreateCaptureWindow为建立捕捉窗口,参数分别为新建窗口标题、窗口风格、窗口相对父窗口的坐标、窗台的宽度和高度、父窗口句柄和窗口ID。如果窗口建立成功,则返回捕捉窗口句柄。
LRESULT SendMessage (HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)函数将指定的消息发送到一个或多个窗口。参数hWnd为接收消息的窗口的句柄,Msg为指定被发送的消息,wParam和IParam指定附加的消息特定信息。主要与视频捕捉有关的消息。①WM_CAP_SET_PREⅥEW ,设置预览模式;②WM_CAP_SET_OVERLAY ,设置覆盖;③WM_CAP_SET_PREⅥEWRATE,设置采样帧速率;④WM_CAP_GRAB_FRame,捕捉单帧作为静止图象;⑤WM_CAP_DRIVER_CONNECT ,连接摄像机;⑥WM_CAP_DRIVER_DISCONNECT,断开摄像机。
HWND FindWindow (LPCSTR lpClass-Name,LPCSTR lpWindowName)函数为查找指定程序的窗口句柄,本应用中主要用来查找前面板的窗口句柄。参数lpClassName为指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子,lpWindowName为指定窗口标题的字符串。
2 labVIEW环境下视频捕捉实现
labVIEW的主流编程模式为数据流驱动模式,根据视频捕捉的实际应用,软件设计采用事件驱动模式来实现,前面板设计连接摄像机、断开摄像机、单帧捕捉三个按钮,用户通过点击相应的按钮实现其对应功能。连接摄像机按钮对应程序流程图如图1所示。
图1 连接摄像机按钮事件流程图
对应labVIEW程序如图2所示。如果用户的labVIEW环境支持私有属性节点,也可通过对windows剪切板操作捕捉图象的复制与粘贴,从而可简化程序设计。图3为程序运行效果图。
图2 连接摄像机按钮事件labVIEW程序图
图3 视频捕捉程序前面板图
其它两个按扭的程序设计与连接摄像机按扭类似。程序中要建立共享变量将视频窗口句柄在不同事件结构中传递,以实现对同一窗口的消息发送。
3 结 论
labVIEW具有丰富的函数资源,同时提供了多种与外部程序的接口,使用labVIEW环境开发应用程序可以简化算法设计,起到事半功倍的效果。本视频捕捉程序在lab-VIEW2012和windows8环境调试通过。
[1]陈树学,刘 萱.LABVIEW宝典[M].北京:电子工业出版社,2012.
[2]杨乐平.LABVIEW高级程序设计[M].北京:清华大学出版社,2007.