成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用VFW在Delphi中開發視頻捕獲程序

開發 開發工具
文中詳細介紹了如何利用VFW在Delphi中開發視頻捕獲程序的步驟,同時給出了程序實例。

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

  1. 引言

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

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

表1 VFW功能模塊:

功能 模塊
AVICAP.DLL 包含執行視頻捕獲的函數,它給AVI文件的I/O處理和視頻、音頻設備驅動程序提供一個高級接口
MSVIDEO.DLL 包含一套特殊的DrawDib函數,用來處理屏幕上的視頻操作
MCIAVI.DRV 包括對VFW的MCI命令解釋器的驅動程序
AVIFILE.DLL 包含由標準多媒體I/O(mmio)函數提供的更高的命令,用來訪問.AVI文件
ICM 壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器(Codec)
ACM 音頻壓縮管理器,提供與ICM相似的服務,適用于波形音頻

 

#p#

  2. 視頻捕獲程序開發的基本步驟

  2.1 使用AVICap窗口類

  筆者使用的是AVICap窗口類來開發視頻捕獲程序。AVICap類支持實時視頻流捕獲和單幀捕獲,并提供對視頻源的控制。通常使用的MCI控件雖然也提供了數字視頻服務。并為視頻疊加提供了Overlay命令集等,但這些命令主要是基于文件的操作,還不能滿足實時地從視頻緩存中提取數據的要求。對于使用沒有視頻疊加能力的捕獲卡的PC機來說,用MCI提供的命令集是無法捕獲視頻流的。而AVICap窗口類在捕獲視頻方面具有一定的優勢,它能直接訪問視頻緩沖區,而不需要生成中間文件,因而實時性很強,效率也很高。另外,它還可將數字視頻捕獲到一個文件中。

  2.2 開發的基本步驟

  開發視頻捕獲程序主要有以下四個步驟:

  (1)創建“捕獲窗”。

  在進行視頻捕獲之前必需要先創建一個“捕獲窗”,并應以此為基礎進行所有的捕獲及設置操作。“捕獲窗”可用AVICap窗口類的“Cap Create Capture Window”函數來創建,其窗口風格可設置為WSCHILD和WS_VISIBLE參數。

  “捕獲窗”類似于標準控件,它具有下列功能:

  *將視頻流和音頻流捕獲到一個AVI文件中;

  *動態地同視頻和音頻輸入器件連接或斷開;

  *以Overlay或Preview模式對輸入的視頻流進行實時顯示;

  *在捕獲時,可指定所用的文件名,并可將捕獲文件的內容拷貝到另一個文件;

  *設置捕獲速率;

  *顯示控制視頻源、視頻格式及視頻壓縮的對話框;

  *創建、保存或載入調色板;

  *將圖像和相關的調色板拷貝到剪貼板;

  *將捕獲的單幀圖像保存到DIB格式文件。

  (2)關聯捕獲窗和驅動程序

  單獨定義的捕獲窗是不能工作的,它須與一個設備相關聯才能取得視頻信號。用函數CapDriver Connect可使捕獲窗與其設備驅動程序相關聯。

  (3)設置視頻設備的屬性

  通過設置TcaptureParms結構變量的各個成員變量,可以控制設備的采樣頻率、中斷采樣按鍵、狀態行為。設置好TcaptureParms結構變量后,可以用函CapCaptureSetSetup使設置生效。之后還可以用CapPreviewScale、CapPreviewRate設置預覽的比例與速度,也可以直接使用設備的默認值。

  (4)打開預覽

  利用函數CapOverlay可選擇是否采用疊加模式預覽,以使系統資源占用小,視頻顯示速度加快。然后用CapPreview啟動預覽功能,這時就可以在屏幕上看到來自攝像機的圖像了。

  通過以上四步就可以建立一個基本的視頻捕獲程序,但如果想自己處理從設備捕獲到的視頻數據,則要使用捕獲窗回調函數來處理,比如一幀一幀地獲得視頻數據或以流的方式獲得視頻數據等。

#p#

  3. 基于Delphi的視頻捕獲程序

  根據系統對系統訪問、處理速度等方面的特殊需求,筆者選用Delphi作為開發工具。下面以開發一個逐幀從視頻設備上捕獲視頻數據的程序為例,來說明每個函數的作用以及開發的具體過程。所給例程的功能是可以在屏幕上顯示捕獲到的視頻,并可以獲得每一幀的圖像數據。具體步驟如下:

  以下是引用片段:

  (1)新建一個工程,并將AVICAP32.PAS包含到USES中。

  (2)在Form1上放置一個Tpanel控件,設Name為“gCapVideoArea”,該控件用于顯示視頻。之后再放置兩個Tbutton控件,一個Name為“Openvideo”,另一個Name為“Closevideo”。

  (3)定義全局變量

  1. ghCapWnd:Thandle; //定義捕獲窗句柄   
  2. VideoStr:LPVIDEOHDR; //可以得到視頻數據指針的結構變量,用于回調函數中  
  3. CapParms:TcaptureParms; //用于設置設備屬性的結構變量     

  (4)編寫代碼

  在Name為“Openvideo”的Tbutton的Click事件中寫入以下代碼:

  1. procedure Tform1.OpenvidoClick(Sender:TObject);   
  2. begin   
  3. //使用Tpanel控件來創建捕獲窗口   
  4. ghCapWnd:=CapCreateCaptureWindow(Pchar('KruwoSoft'),   
  5. WS_CHILD or WS_VISIBLE, //窗口樣式   
  6. 0,//X坐標   
  7. 0,//Y坐標   
  8. gCapVideoArea,Width, //窗口寬   
  9. gCapVideoArea,Handle, //窗口句柄   
  10. 0); //一般為0   

  為了能夠捕獲視頻,應啟動一個捕獲幀回調函數VideoStreamCallBack。捕獲一個視頻流或當前設備狀態時,應分別使用以下函數:

  1. CapSetCallbackOnVideoStream; //捕獲一個視頻流   
  2. CapSetCallbackOnError; //得到一個設備錯誤   
  3. CapSetCallbackOnStatus //得到一個設備狀態   
  4. //定義一個幀捕獲回調函數   
  5. CapSetCallbackOnFrame (ghCapWnd,LongInt(@VideoStreamCallBack));   
  6. //將一個捕獲窗口與一個設備驅動相關聯,第二個參數是個序號,當系統中裝有多個顯示驅動程序時,其值分別依次為0到總個數   
  7. CapDreiverConnect(ghCapWnd,0);   
  8. CapParms,dwRequestMicroSecPerFrame:=40000;   
  9. CapParms.fLimitEnabled:=FALSE;   
  10. CapParms.fCaptureAudio:=FALSE;//NO Audio   
  11. CapParms.fMCIControl:=FALSE;   
  12. CapParms.fYield:=TRUE;   
  13. CapParms.vKeyAbort:=VK_ESCAPE;   
  14. CapParms.fAbortLeftMouse:=FLASE;   
  15. CapParms.fAbortRightMouse:=FALSE;   
  16. //使設置生效   
  17. CapCaptureSetSetup(ghCapWnd,LongInt(@CapParms),sizeof(TCAPTUREPARMS));   
  18. CapPreviewScale(ghCapWnd,1);   
  19. CapPreviewRate(ghCapWnd,66);   

  如果要捕獲視頻流,則要使用函數來指定不生成文件。否則將會自動生成AVI文件:

  1. CapCaptureSequenceNoFile(ghCapWnd); 

  指定是否使用疊加模式,1為使用,否則為0;

  1. CapOverlay(ghCapWnd,1);   
  2. CapPreview(ghCapWnd,1);   
  3. End;  

  在Name為“Closevideo”的Tbutton的Click事件中寫入以下代碼:

  1. procedure TForm1.ClosevideoClick(Sender:Tobject);   
  2. begin   
  3. capCaptureAbort(ghCapWnd); //停止捕獲   
  4. capDriveDisconnect(ghCapWnd); //將捕獲窗同驅動器斷開   
  5. end;  

  定義捕獲幀回調函數:

  1. function FrameCallBack(hWnd:HWND;lpVHdr:LongInt):LongInt;stdcall;   
  2. var   
  3. DataPoint:^byte;   
  4. DibLen,RectWidth,RectHeight:integer;   
  5. begin   
  6. VideoStr:=LPVIDEOHDR(lpVHdr);   
  7. DibLen:=VideoStr^.dwBufferLength;   
  8. GetMem(DataPoint,64000);   
  9. //將幀數據COPY到一個內存中,注意:DATAPOINT要先分配空間   
  10. CopyMemory(DataPoint,VideoStr^.lpData,Diblen);   
  11. ……   
  12. end;   

#p#

  結束語:

  靈活地使用AVICap窗口類的回調函數可以滿足各種需求,但要注意從視頻卡中捕獲的視頻數據的格式和圖像的長寬要參考視頻卡的參數。另外,有些視頻卡通過設置可支持多種格式和圖像長寬,所以,在還原圖像時,要注意參考所用的視頻卡的參數。

【編輯推薦】

  1. Delphi基礎開發技巧
  2. Delphi編程讀取txt文件數據
  3. 如何在Delphi中自動錄入數據
  4. 基于Delphi的屏幕抓圖技術的實現
  5. Delphi初學者應小心的六大問題
責任編輯:韓亞珊 來源: 編程愛好者
相關推薦

2009-01-16 08:57:58

GCCC編譯

2024-01-30 08:56:55

性能監控性能管理工具內存存儲

2009-07-04 10:00:12

電纜傳輸視頻布線

2014-03-13 11:25:43

C++OpenCV

2011-07-21 15:49:27

iPhone 模擬器 視頻

2009-08-10 13:05:06

C# DLLC# Delphi開發

2013-09-13 13:15:28

AndroidWebViewJavaScript

2010-06-12 16:41:10

BlackBerry開

2010-02-02 13:15:00

C++ lambda函

2022-07-20 09:07:03

Linuxtcpdump網絡工具

2014-01-07 10:12:15

Spark

2009-04-09 15:40:01

JSONJavaScript枚舉

2021-02-20 09:57:02

人工智能移動應用

2011-02-25 15:49:09

NecessitasQtAndroid

2009-05-26 12:23:56

Linux變量文件命名

2019-07-05 18:06:18

ffsendFirefox SenLinux

2013-04-22 15:24:16

Android開發Android屏保程序

2021-07-20 07:58:54

WSLWindows 系統Linux 程序

2011-07-13 15:32:38

ODBC數據庫驅動程序系統DSN

2020-10-13 19:04:58

Bash信號捕獲Shell腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 麻豆91精品91久久久 | 亚洲激情在线观看 | 91原创视频在线观看 | 99免费在线观看视频 | 日韩在线一区二区 | av日韩一区 | 亚洲精品天堂 | 国产精品亚洲成在人线 | 国产99视频精品免费播放照片 | 91国内精精品久久久久久婷婷 | 天堂亚洲网 | 中文字幕亚洲区 | 天天干视频网 | 欧美黄色一区 | 中文字幕精品一区 | 国产精品一区二区三区在线 | 视频一区二区在线观看 | 日韩小视频 | 成人免费视频 | 久久国产精品久久 | 久久久久国产精品 | 国内精品伊人久久久久网站 | 国产高清在线 | 亚洲国产精品一区二区三区 | 久草视频观看 | 亚洲品质自拍视频 | 亚洲一区二区三区在线 | 日韩欧美中文在线 | 久产久精国产品 | 国产免费一区二区三区 | 成人网视频| 色综合桃花网 | 国产精品久久久久久久久免费相片 | 欧美二级 | 国产精品自产拍在线观看蜜 | 欧美一级黄色片在线观看 | 91精品国产综合久久婷婷香蕉 | 天天综合成人网 | 亚洲精品乱码久久久久久黑人 | 美女一级黄 | 国产精品久久一区二区三区 |