陳希球,田有成
(1.長(zhǎng)江工程職業(yè)技術(shù)學(xué)院,武漢430212;2.長(zhǎng)江中游水文水資源勘測(cè)局,武漢430010)
美國(guó)國(guó)家儀器公司(National Instruments)的軟件產(chǎn)品labVIEW,以圖形化編程模式更顯直觀高效,同時(shí)又不乏靈活性。其應(yīng)用范圍覆蓋工業(yè)自動(dòng)化、測(cè)試測(cè)量、嵌入式應(yīng)用、運(yùn)動(dòng)控制、圖象處理、計(jì)算機(jī)仿真等眾多領(lǐng)域。在圖象處理方面,提供了極其豐富的處理與算法分析函數(shù),易于用戶構(gòu)建處理系統(tǒng),縮短了系統(tǒng)開(kāi)發(fā)周期。由于NI公司提供的圖象采集卡價(jià)格不菲,構(gòu)建應(yīng)用系統(tǒng)時(shí),硬件采用通用圖象采集卡,再利用labVIEW強(qiáng)大的軟件資源,不失為明智之舉,既節(jié)省成本,又方便軟件設(shè)計(jì)。
labVIEW的互聯(lián)接口函數(shù)面板中提供了調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(CLN),利用CLN可以調(diào)用DLL和API函數(shù)。在使用CLN節(jié)點(diǎn)時(shí),需要利用對(duì)話框配置調(diào)用環(huán)境,包括指定DLL或API對(duì)應(yīng)文件的路徑,調(diào)用規(guī)范應(yīng)選用stdcall(WINAPI),在線程選項(xiàng)中應(yīng)選擇“在UI線程中運(yùn)行”選項(xiàng)。不同函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)數(shù)據(jù)類(lèi)型都不盡相同,在配置時(shí)要按函數(shù)的要求增加相應(yīng)參數(shù)并選擇對(duì)應(yīng)的數(shù)據(jù)類(lèi)型,在選擇數(shù)據(jù)類(lèi)型時(shí)要注意labVIEW中的數(shù)據(jù)類(lèi)型與C語(yǔ)言的對(duì)應(yīng)關(guān)系。
Window提供了實(shí)時(shí)音視頻處理動(dòng)態(tài)鏈接庫(kù)avicap32.DLL,可以創(chuàng)建捕捉窗口,并通過(guò)向窗口發(fā)送消息實(shí)現(xiàn)視頻捕捉。其相關(guān)函數(shù)和消息說(shuō)明如下:
capCreateCaptureWindow為建立捕捉窗口,參數(shù)分別為新建窗口標(biāo)題、窗口風(fēng)格、窗口相對(duì)父窗口的坐標(biāo)、窗臺(tái)的寬度和高度、父窗口句柄和窗口ID。如果窗口建立成功,則返回捕捉窗口句柄。
LRESULT SendMessage (HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)函數(shù)將指定的消息發(fā)送到一個(gè)或多個(gè)窗口。參數(shù)hWnd為接收消息的窗口的句柄,Msg為指定被發(fā)送的消息,wParam和IParam指定附加的消息特定信息。主要與視頻捕捉有關(guān)的消息。①WM_CAP_SET_PREⅥEW ,設(shè)置預(yù)覽模式;②WM_CAP_SET_OVERLAY ,設(shè)置覆蓋;③WM_CAP_SET_PREⅥEWRATE,設(shè)置采樣幀速率;④WM_CAP_GRAB_FRame,捕捉單幀作為靜止圖象;⑤WM_CAP_DRIVER_CONNECT ,連接攝像機(jī);⑥WM_CAP_DRIVER_DISCONNECT,斷開(kāi)攝像機(jī)。
HWND FindWindow (LPCSTR lpClass-Name,LPCSTR lpWindowName)函數(shù)為查找指定程序的窗口句柄,本應(yīng)用中主要用來(lái)查找前面板的窗口句柄。參數(shù)lpClassName為指向一個(gè)以null結(jié)尾的、用來(lái)指定類(lèi)名的字符串或一個(gè)可以確定類(lèi)名字符串的原子,lpWindowName為指定窗口標(biāo)題的字符串。
labVIEW的主流編程模式為數(shù)據(jù)流驅(qū)動(dòng)模式,根據(jù)視頻捕捉的實(shí)際應(yīng)用,軟件設(shè)計(jì)采用事件驅(qū)動(dòng)模式來(lái)實(shí)現(xiàn),前面板設(shè)計(jì)連接攝像機(jī)、斷開(kāi)攝像機(jī)、單幀捕捉三個(gè)按鈕,用戶通過(guò)點(diǎn)擊相應(yīng)的按鈕實(shí)現(xiàn)其對(duì)應(yīng)功能。連接攝像機(jī)按鈕對(duì)應(yīng)程序流程圖如圖1所示。
圖1 連接攝像機(jī)按鈕事件流程圖
對(duì)應(yīng)labVIEW程序如圖2所示。如果用戶的labVIEW環(huán)境支持私有屬性節(jié)點(diǎn),也可通過(guò)對(duì)windows剪切板操作捕捉圖象的復(fù)制與粘貼,從而可簡(jiǎn)化程序設(shè)計(jì)。圖3為程序運(yùn)行效果圖。
圖2 連接攝像機(jī)按鈕事件labVIEW程序圖
圖3 視頻捕捉程序前面板圖
其它兩個(gè)按扭的程序設(shè)計(jì)與連接攝像機(jī)按扭類(lèi)似。程序中要建立共享變量將視頻窗口句柄在不同事件結(jié)構(gòu)中傳遞,以實(shí)現(xiàn)對(duì)同一窗口的消息發(fā)送。
labVIEW具有豐富的函數(shù)資源,同時(shí)提供了多種與外部程序的接口,使用labVIEW環(huán)境開(kāi)發(fā)應(yīng)用程序可以簡(jiǎn)化算法設(shè)計(jì),起到事半功倍的效果。本視頻捕捉程序在lab-VIEW2012和windows8環(huán)境調(diào)試通過(guò)。
[1]陳樹(shù)學(xué),劉 萱.LABVIEW寶典[M].北京:電子工業(yè)出版社,2012.
[2]楊樂(lè)平.LABVIEW高級(jí)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.