摘 要:在數(shù)字圖像處理技術(shù)的圖像測量系統(tǒng)中,必須解決的問題就是圖像采集,利用VFW技術(shù)來實(shí)現(xiàn)圖像的實(shí)時(shí)采集,可以提高視頻捕獲的靈活性,減少了對視頻設(shè)備的依賴性,為視頻圖像的處理和分析帶來了非常大的便利。本文利用VFW中的AVICap 窗口類來采集圖像,詳細(xì)介紹了視頻圖像采集程序的方法,解決了數(shù)字圖像采集及處理技術(shù)在圖像測量中的應(yīng)用問題。
關(guān)鍵詞:VFW AVICap類 圖像采集 圖像測量
中圖分類號(hào):TP274文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1674-098X(2012)3(a)-0037-01
1 引言
隨著自動(dòng)化和計(jì)算機(jī)技術(shù)的飛速發(fā)展,越來越多的應(yīng)用程序不僅要求能夠處理已經(jīng)存儲(chǔ)好的圖像,還要求能夠?qū)崟r(shí)的獲取視頻圖像,比如醫(yī)療設(shè)備,視頻會(huì)議,可視電話等系統(tǒng),同時(shí),用于工業(yè)的檢測產(chǎn)品圖像檢測技術(shù)也有了飛速的發(fā)展,如焊縫自動(dòng)跟蹤、四輪定位系統(tǒng)等。而如何實(shí)現(xiàn)視頻捕捉是程序設(shè)計(jì)的關(guān)鍵。視頻圖像的捕獲一般有兩種方法,一種是利用視頻捕獲卡所附帶的SDK開發(fā)工具,這種捕獲方法的實(shí)現(xiàn)是與設(shè)備有關(guān)的,依賴于視頻捕獲卡與攝像頭的類型,不利用靈活應(yīng)用;另一種捕獲方法就是VFW(Video for Windows)[1],這給視頻捕獲編程帶來了很大的方便,利用利用VFW技術(shù)可以提高視頻不獲的靈活性,減少了對視頻設(shè)備的依賴性。Visual C+ +所提供VFW軟件包中的AVICap 窗口類提供了一條捷徑,我們能夠方便地將視頻操作功能組合到應(yīng)用程序中去。
2 基于Visual C+ +編寫視頻圖像采集程序方法
2.1 AVICap窗口類的功能
VFW中 AVICap窗口類是Windows環(huán)境下實(shí)現(xiàn)視頻操作的重要工具。利用該類函數(shù)可以方便地實(shí)現(xiàn)視音頻操作功能程序的編制。AVICap類的主要功能有如下幾個(gè)方面:動(dòng)態(tài)鏈接和斷開視、音頻捕捉設(shè)備;設(shè)置視頻捕捉速率;設(shè)置視頻格式及來源;指定保存的文件名及路徑;提供Overlay(視頻疊加)和Preview(視頻預(yù)覽)兩種顯示模式;實(shí)時(shí)捕捉和存儲(chǔ)單幀視頻圖像并送入剪貼板,也可捕捉視音頻流并存入AVI影音文件;通過AVICap的回調(diào)函數(shù)獲得有關(guān)視頻捕捉的狀態(tài)。
2.2 AVICap窗口類的主要函數(shù)
AVIcap窗口類為開發(fā)人員提供了一整套視頻操作函數(shù),包括一些回調(diào)函數(shù)、宏及一些普通函數(shù),利用這些函數(shù)可以實(shí)現(xiàn)視頻捕捉及預(yù)覽程序所需的窗口管理[4]。在Windows系統(tǒng)中,回調(diào)函數(shù)是一類特殊函數(shù),功能類似中斷函數(shù),其調(diào)用過程由系統(tǒng)自動(dòng)完成,回調(diào)函數(shù)的具體內(nèi)容則由用戶設(shè)定,在系統(tǒng)中當(dāng)某一回調(diào)函數(shù)被設(shè)定后,在某一特定的條件滿足時(shí),系統(tǒng)自動(dòng)調(diào)用該回調(diào)函數(shù),如:Video -Stream Callback、capStatusCallback 等函數(shù);在 AVICap類中,宏的使用完全類似于普通函數(shù),其功能等同發(fā)送相應(yīng)的 Windows 窗口消息;AVICap 窗口類中的普通函數(shù)只有兩個(gè),capGetDriverDescription CreateCaptureWindow。下面將應(yīng)用程序設(shè)計(jì)中常用到的幾個(gè)主要的AVIcap 窗口類函數(shù)加以介紹。
(1)HWNDVFWAPIcapCreateCaptureWindow (LPC2STR lpszWindowName , DWORD dwStyle , int x , int y ,int nWidth, int nHeight , HWND hWnd, int nID) ;
該函數(shù)主要完成視頻捕捉窗口的開辟,如果函數(shù)調(diào)用成功,返回該窗口句柄,否則返回“NULL”。
(2)Int capDriverConnect ( HWND hWnd, int iIn2dex) , capDriverDisconnect (HWND hWnd)該兩宏函數(shù)負(fù)責(zé)將視頻窗口與捕捉設(shè)備相連接或斷開。如成功,返回“TRUE”, 否則返回“FALSE”。
(3)int FileSetCaptureFile (HWND hWnd, LPCSTRFilename) 。該函數(shù)用于設(shè)置存儲(chǔ)視頻數(shù)據(jù)的影音文件名。函數(shù)調(diào)用成功,返回“TRUE”, 否則返回“FALSE”。
(4)BOOL capFileSaveDIB (HWND hwnd, LPCSTRszName) 函數(shù)負(fù)責(zé)捕捉視頻窗口當(dāng)前圖像,并將其數(shù)據(jù)以BMP 文件格式存儲(chǔ)到名為 szName 的位圖文件中。
(5)BOOL capCaptureSequence (HWND hWnd) 宏函數(shù)主要負(fù)責(zé)觸發(fā)程序開始捕捉視頻流圖像并將其壓入所設(shè)定影音數(shù)據(jù)文件中。
(6)BOOL capPreviewRate(hwnd,wMS)宏函數(shù)負(fù)責(zé)設(shè)置視頻圖像預(yù)覽速度。
3 視頻圖像實(shí)時(shí)采集程序的編制實(shí)例
實(shí)時(shí)視頻捕獲的流程.
本系統(tǒng)的視頻圖像捕獲流程如圖1所示。
4 結(jié)語
Visual C++中提供的AVICap窗口類為捕獲數(shù)字視頻圖像及其相關(guān)操作提供了很大的方便,基于此思想開放出來的視頻捕獲應(yīng)用程序,界面形象直觀,性能穩(wěn)定,具有很好的靈活性和可擴(kuò)展性,在很多數(shù)字圖像處理技術(shù)的圖像測量系統(tǒng)中都使用了這種方法。
參考文獻(xiàn)
[1]David J Kruglinski(美) 著,Visual C++技術(shù)內(nèi)幕[M],北京:清華大學(xué)出版社,2002.Beijing.
[2]官章全,韓云君,Visual C++高級(jí)編程范例[M],北京:電子工業(yè)出版社,2001.
[3]石峻,余松煜.Windows環(huán)境下的實(shí)時(shí)視頻捕獲技術(shù)[J].計(jì)算機(jī)工程,1999,25(8).
[4]陳琿,張會(huì)汀,周杰華 利用VFW實(shí)現(xiàn)實(shí)時(shí)視頻捕獲及應(yīng)用[J],計(jì)算機(jī)應(yīng)用,2003年第8期141-143頁.
①作者簡介:趙磊,男,滿族,助理工程師,研究生。