基于Delphi的VFW視頻捕獲程序的開發_第1頁
基于Delphi的VFW視頻捕獲程序的開發_第2頁
基于Delphi的VFW視頻捕獲程序的開發_第3頁
基于Delphi的VFW視頻捕獲程序的開發_第4頁
基于Delphi的VFW視頻捕獲程序的開發_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于Delphi的VFW視頻捕獲程序的開發     摘要:許多關于視頻的軟件(如視頻會議、可視電話等)開發都應用于視頻捕獲技術。微軟為軟件開發人員提供了一個專門用于視頻捕獲的VFW SDK,從而為在Windows系統中實現視頻捕獲提供了標準的接口,并大大降低了程序的開發難度。由于VFW SDK只有VC和VB版,沒有Delphi版,因此需要在Delphi中一一聲明DLL中的各個函數和變量。文中詳細介紹了如何利用VFW在Delphi中開發視頻捕獲程序的步驟,同時給出了程序實例。     關鍵詞:Delphi Video for

2、Windows 視頻捕獲1 引言視頻捕獲與實時處理是目前圖像處理系統中最關鍵的技術之一,能否準確捕獲指定的視頻圖像,進而實現精確地數據分析與處理,關系到整個系統的成敗。筆者在開發“公路安全線軋壓檢測系統”時就遇到此情況。該系統主要研究在公路關鍵地段,過往機動車輛是否瞬間軋壓黃色安全線。因此車輛軋壓安全線的一個主要原因是車輛超車或逆向行使而違反了上下行規則,這是造成交通事故的最主要、最直接的因素。本系統通過實時拍攝,抓取瞬間圖像,并經過系統的分析和處理來及時準確地檢測車輛行駛情況,從而驅動控制設備以作出相關處理。顯然,這個系統的關鍵之處是實時捕獲視頻圖像。為此,采用微軟公司推出的關于數字視頻的一

3、個軟件包VFW。它能使應用程序通過數字化設備從傳統的模擬視頻源得到數字化的視頻剪輯。VFW的一個關鍵思想是播放時不需要專用硬件。為了解決數字視頻數據量大的問題,需要對數據進行壓縮,而VFW引進了AVI的文件標準。該標準未規定如何對視頻進行捕獲、壓縮及播放,僅規定視頻和音頻該如何存儲在硬盤上及在AVI文件中交替存儲視頻幀和與之相匹配的音頻數據。但VFW可使程序員通過發送消息或設置屬性來捕獲、播放和編輯視頻剪輯。當用戶在安裝VFW時,安裝程序會自動地安裝配置視頻所需要的組件,如設備驅動程序、視頻壓縮程序等。VFW主要由6個模塊組成。具體如表1所列。表1 VFW功能模塊模  塊功 

4、;     能AVICAP.DLL包含執行視頻捕獲的函數,它給AVI文件的I/O處理和視頻、音頻設備驅動程序提供一個高級接口MSVIDEO.DLL包含一套特殊的DrawDib函數,用來處理屏幕上的視頻操作MCIAVI.DRV包括對VFW的MCI命令解釋器的驅動程序AVIFILE.DLL包含由標準多媒體I/O(mmio)函數提供的更高的命令,用來訪問.AVI文件ICM壓縮>' target='_blank' class='infotextkey'>管理器,用于>' target='_

5、blank' class='infotextkey'>管理的視頻壓縮/解壓縮的編譯碼器(Codec)ACM音頻壓縮>' target='_blank' class='infotextkey'>管理器,提供與ICM相似的服務,適用于波形音頻2 視頻捕獲程序開發的基本步驟2.1 使用AVICap窗口類筆者使用的是AVICap窗口類來開發視頻捕獲程序。AVICap類支持實時視頻流捕獲和單幀捕獲,并提供對視頻源的控制。通常使用的MCI控件雖然也提供了數字視頻服務。并為視頻疊加提供了Overlay命令集等,但這些命令主要是

6、基于文件的操作,還不能滿足實時地從視頻緩存中提取數據的要求。對于使用沒有視頻疊加能力的捕獲卡的PC機來說,用MCI提供的命令集是無法捕獲視頻流的。而AVICap窗口類在捕獲視頻方面具有一定的優勢,它能直接訪問視頻緩沖區,而不需要生成中間文件,因而實時性很強,效率也很高。另外,它還可將數字視頻捕獲到一個文件中。2.2 開發的基本步驟開發視頻捕獲程序主要有以下四個步驟:(1)創建“捕獲窗”。在進行視頻捕獲之前必需要先創建一個“捕獲窗”,并應以此為基礎進行所有的捕獲及設置操作。“捕獲窗”可用AVICap窗口類的“Cap Create Capture Window”函數來創建,其窗口風格可設置為WSC

7、HILD和WS_VISIBLE參數。“捕獲窗”類似于標準控件,它具有下列功能:*將視頻流和音頻流捕獲到一個AVI文件中;*動態地同視頻和音頻輸入器件連接或斷開;*以Overlay或Preview模式對輸入的視頻流進行實時顯示;*在捕獲時,可指定所用的文件名,并可將捕獲文件的內容拷貝到另一個文件;*設置捕獲速率;*顯示控制視頻源、視頻格式及視頻壓縮的對話框;*創建、保存或載入調色板;*將圖像和相關的調色板拷貝到剪貼板;*將捕獲的單幀圖像保存到DIB格式文件。(2)關聯捕獲窗和驅動程序單獨定義的捕獲窗是不能工作的,它須與一個設備相關聯才能取得視頻信號。用函數CapDriver Connect可使捕

8、獲窗與其設備驅動程序相關聯。(3)設置視頻設備的屬性通過設置TcaptureParms結構變量的各個成員變量,可以控制設備的采樣頻率、中斷采樣按鍵、狀態行為。設置好TcaptureParms結構變量后,可以用函CapCaptureSetSetup使設置生效。之后還可以用CapPreviewScale、CapPreviewRate設置預覽的比例與速度,也可以直接使用設備的默認值。(4)打開預覽利用函數CapOverlay可選擇是否采用疊加模式預覽,以使系統資源占用小,視頻顯示速度加快。然后用CapPreview啟動預覽功能,這時就可以在屏幕上看到來自攝像機的圖像了。通過以上四步就可以建立一個基本

9、的視頻捕獲程序,但如果想自己處理從設備捕獲到的視頻數據,則要使用捕獲窗回調函數來處理,比如一幀一幀地獲得視頻數據或以流的方式獲得視頻數據等。3 基于Delphi的視頻捕獲程序根據系統對系統訪問、處理速度等方面的特殊需求,筆者選用Delphi作為開發工具。下面以開發一個逐幀從視頻設備上捕獲視頻數據的程序為例,來說明每個函數的作用以及開發的具體過程。所給例程的功能是可以在屏幕上顯示捕獲到的視頻,并可以獲得每一幀的圖像數據。具體步驟如下:(1)新建一個工程,并將AVICAP32.PAS包含到USES中。(2)在Form1上放置一個Tpanel控件,設Name為“gCapVideoArea”,該控件用

10、于顯示視頻。之后再放置兩個Tbutton控件,一個Name為“Openvideo”,另一個Name為“Closevideo”。(3)定義全局變量ghCapWnd:Thandle; /定義捕獲窗句柄VideoStr:LPVIDEOHDR; /可以得到視頻數據指針的結構變量,用于回調函數中CapParms:TcaptureParms; /用于設置設備屬性的結構變量(4)編寫代碼在Name為“Openvideo”的Tbutton的Click事件中寫入以下代碼:procedure Tform1.OpenvidoClick(Sender:TObject);begin/使用Tpanel控件來創建捕獲窗口g

11、hCapWnd:=CapCreateCaptureWindow(Pchar('KruwoSoft'),WS_CHILD or WS_VISIBLE, /窗口樣式0,/X坐標0,/Y坐標gCapVideoArea,Width, /窗口寬gCapVideoArea,Handle, /窗口句柄0); /一般為0為了能夠捕獲視頻,應啟動一個捕獲幀回調函數VideoStreamCallBack。捕獲一個視頻流或當前設備狀態時,應分別使用以下函數:CapSetCallbackOnVideoStream; /捕獲一個視頻流CapSetCallbackOnError; /得到一個設備錯誤Cap

12、SetCallbackOnStatus /得到一個設備狀態/定義一個幀捕獲回調函數CapSetCallbackOnFrame (ghCapWnd,LongInt(VideoStreamCallBack);/將一個捕獲窗口與一個設備驅動相關聯,第二個參數是個序號,當系統中裝有多個顯示驅動程序時,其值分別依次為0到總個數CapDreiverConnect(ghCapWnd,0);CapParms,dwRequestMicroSecPerFrame:=40000;CapParms.fLimitEnabled:=FALSE;CapParms.fCaptureAudio:=FALSE;/NO Audio

13、CapParms.fMCIControl:=FALSE;CapParms.fYield:=TRUE;CapParms.vKeyAbort:=VK_ESCAPE;CapParms.fAbortLeftMouse:=FLASE;CapParms.fAbortRightMouse:=FALSE;/使設置生效CapCaptureSetSetup(ghCapWnd,LongInt(CapParms),sizeof(TCAPTUREPARMS);CapPreviewScale(ghCapWnd,1);CapPreviewRate(ghCapWnd,66);如果要捕獲視頻流,則要使用函數來指定不生成文件。否

14、則將會自動生成AVI文件:CapCaptureSequenceNoFile(ghCapWnd);指定是否使用疊加模式,1為使用,否則為0;CapOverlay(ghCapWnd,1);CapPreview(ghCapWnd,1);End;在Name為“Closevideo”的Tbutton的Click事件中寫入以下代碼:procedure TForm1.ClosevideoClick(Sender:Tobject);begincapCaptureAbort(ghCapWnd); /停止捕獲capDriveDisconnect(ghCapWnd); /將捕獲窗同驅動器斷開end;定義捕獲幀回調函數:function FrameCallBack(hWnd:HWND;lpVHdr:LongInt):LongInt;stdcall;varDataPoint:byte;DibLen,RectWidth,RectHeight:integer;beginVideoStr:=LPVIDEOHDR(lpVHdr);DibLen:=VideoStr.dwBufferLe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論