C#對(duì)攝像頭進(jìn)行操作_第1頁
C#對(duì)攝像頭進(jìn)行操作_第2頁
C#對(duì)攝像頭進(jìn)行操作_第3頁
C#對(duì)攝像頭進(jìn)行操作_第4頁
C#對(duì)攝像頭進(jìn)行操作_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在一些銀行、大型商場(chǎng)、辦公樓、升降電梯中,為了保障公有財(cái)產(chǎn)、商品、辦公設(shè)備、資料、人身等的安全,都設(shè)有監(jiān)控系統(tǒng)。在出現(xiàn)問題時(shí),用戶可以通過監(jiān)控系統(tǒng)查找原因。下面的幾個(gè)實(shí)例分別實(shí)現(xiàn)了攝像頭監(jiān)控與定時(shí)監(jiān)控的功能。利用普通的簡(jiǎn)易攝像頭,通過C#語言即可開發(fā)成簡(jiǎn)易視頻程序。本實(shí)例利用市場(chǎng)上購買的普通攝像頭,利用VFW技術(shù),實(shí)現(xiàn)單路視頻監(jiān)控系統(tǒng)。運(yùn)行程序,窗體中將顯示艦體攝像頭米集的視頻信息。如圖13.9所示。技術(shù)要點(diǎn)本實(shí)例主要使用了VFW(VideoforWindows)技術(shù)。VFW是Microsoft公司為開發(fā)Windows平臺(tái)下的視頻應(yīng)用程序提供的軟件工具包,提供了一系列應(yīng)用程序編程接口(API)

2、,用戶可以通過這些接口很方便地實(shí)現(xiàn)視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調(diào)函數(shù)開發(fā)比較復(fù)雜的視頻應(yīng)用程序。該技術(shù)的特點(diǎn)是播放視頻時(shí)不需要專用的硬件設(shè)備,而且應(yīng)用靈活,可以滿足視頻應(yīng)用程序開發(fā)的需要。Windows操作系統(tǒng)自身就攜帶了VFW技術(shù),系統(tǒng)安裝時(shí),會(huì)自動(dòng)安裝VFW的相關(guān)組件。VFW技術(shù)主要由六個(gè)功能模塊組成,下面進(jìn)行簡(jiǎn)單說明。lAVICAP32.DLL:包含執(zhí)行視頻捕獲的函數(shù),給AVI文件的I/O處理和視頻,音頻設(shè)備驅(qū)動(dòng)程序提供一個(gè)高級(jí)接口。lMSVIDEO.DLL:包含一套特殊的DrawDib函數(shù),用來處理程序上的視頻操作。lMCIAVI.DRV:包括對(duì)VFW的MCI命令

3、解釋器的驅(qū)動(dòng)程序。lAVIFILE.DLL:包含由標(biāo)準(zhǔn)多媒體I/O(mmio)函數(shù)提供的更高級(jí)的命令,用來訪問.AVI文件。lICM:壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器。lACM:音頻壓縮管理器,提供與ICM相似的服務(wù),適用于波形音頻。其中13.4節(jié)所有的實(shí)例主要使用AVICAP32.DLL中的函數(shù)和USER32.DLL中的函數(shù),函數(shù)語法及結(jié)構(gòu)如下。capCreateCaptureWindow函數(shù)該函數(shù)用于創(chuàng)建一個(gè)視頻捕捉窗口。語法如下:DllImportCavicap32.dll)publicstaticexternIntPtrcapCreateCaptureWindowA(b

4、ytelpszWindowName,intdwStyle,intx,inty,intnWidth,intnHeight,IntPtrhWndParent,intnID);參數(shù)說明如下。llpszWindowName:標(biāo)識(shí)窗口的名稱。ldwStyle:標(biāo)識(shí)窗口風(fēng)格。lx、y:標(biāo)識(shí)窗口的左上角坐標(biāo)。lnWidth、nHeight:標(biāo)識(shí)窗口的寬度和高度。lhWnd:標(biāo)識(shí)父窗口句柄。lnID:標(biāo)識(shí)窗口ID。l返回值:視頻捕捉窗口句柄。(2)SendMessage函數(shù)用于向Windows系統(tǒng)發(fā)送消息機(jī)制。DllImport(User32.dll)privatestaticexternboolSendMe

5、ssage(IntPtrhWnd,intwMsg,intwParam,intlParam);參數(shù)說明如下。lhWnd:窗口句柄。lwMsg:將要發(fā)送的消息。lwParam、lParam:消息的參數(shù),每個(gè)消息都有兩個(gè)參數(shù),參數(shù)設(shè)置由發(fā)送的消息而定。L實(shí)現(xiàn)過程(1)新建一個(gè)項(xiàng)目,命名為Exl3_08,默認(rèn)窗體為Forml,添加1個(gè)類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加1個(gè)PictrueBox控件,用于顯示視頻;添加4個(gè)Button控件,用于打開視頻、關(guān)閉視頻、拍攝照片和退出程序。(3)主要程序代碼。視頻類中主要實(shí)現(xiàn)打開視頻、關(guān)閉視頻以及通過視頻拍攝照片的功能。代碼如下

6、:publicclassVideoAPI/視頻API類/視頻API調(diào)用DllImportCavicap32.dll)publicstaticexternIntPtrcapCreateCaptureWindowA(bytelpszWindowName,intdwStyle,intx,inty,intnWidth,intnHeight,IntPtrhWndParent,intnID);DllImportCavicap32.dll)publicstaticexternboolcapGetDriverDescriptionA(shortwDriver,bytelpszName,intcbName,by

7、telpszVer,intcbVer);DllImport(User32.dll)publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,boolwParam,intlParam);DllImport(User32.dll)publicstaticexternboolSendMessage(IntPtrhWnd,intwMsg,shortwParam,intlParam);/常量publicconstintWM_USER=0 x400;publicconstintWS_CHILD=0 x40000000;publicconstintWS_VIS

8、IBLE=0 x10000000;publicconstintSWP_N0M0VE=0 x2;publicconstintSWP_N0Z0RDER=0 x4;publicconstintWM_CAP_DRIVER_CONNECT=WM_USER+10;publicconstintWM_CAP_DRIVER_DISCONNECT=WM_USER+11;publicconstintWM_CAP_SET_CALLBACK_FRAME=WM_USER+5;publicconstintWM_CAP_SET_PREVIEW=WM_USER+50;publicconstintWM_CAP_SET_PREVI

9、EWRATE=WM_USER+52;publicconstintWM_CAP_SET_VIDEOFORMAT=WM_USER+45;publicconstintWM_CAP_START=WM_USER;publicconstintWM_CAP_SAVEDIB=WM_CAP_START+25;/視頻類publicclasscVideoprivateIntPtrlwndC;/保存無符號(hào)句柄privateIntPtrmControlPtr;/保存管理指示器privateintmWidth;privateintmHeight;publiccVideo(IntPtrhandle,intwidth,int

10、height)mControlPtr=handle;/顯示視頻控件的句柄mWidth=width;/視頻寬度mHeight=height;/視頻高度/打開視頻設(shè)備/publicvoidStartWebCam()bytelpszName=newbyte100;bytelpszVer=newbyte100;VideoAPI.capGetDriverDescriptionA(0,lpszName,100,lpszVer,100);this.lwndC=VideoAPI.capCreateCaptureWindowA(lpszName,VideoAPI.WS_CHILD|VideoAPI.WS_VIS

11、IBLE,0,0,mWidth,mHeight,mControlPtr,0);if(VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_DRIVER_CONNECT,0,0)VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEWRATE,100,0);VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SET_PREVIEW,true,0);/關(guān)閉視頻設(shè)備/publicvoidCloseWebcam()VideoAPI.SendMessage(lwndC,VideoAPI.

12、WM_CAP_DRIVER_DISCONNECT,0,0);/拍照/paramname=path要保存bmp文件的路徑/parampublicvoidGrabImage(IntPtrhWndC,stringpath)IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);VideoAPI.SendMessage(lwndC,VideoAPI.WM_CAP_SAVEDIB,0,hBmp.ToInt32();Forml窗體中通過調(diào)用視頻類中的方法來實(shí)現(xiàn)相應(yīng)的功能。在【打開視頻】按鈕的Click事件中添加如下代碼:privatevoidbuttonl_Click(o

13、bjectsender,EventArgse)btnPlay.Enabled=false;btnStop.Enabled=true;btnPz.Enabled=true;video=newcVideo(pictureBoxl.Handle,pictureBoxl.Width,pictureBoxl.Height);video.StartWebCam();在【關(guān)閉視頻】按鈕的Click事件中添加如下代碼:privatevoidb_stop_Click(objectsender,EventArgse)btnPlay.Enabled=true;btnStop.Enabled=false;btnPz.

14、Enabled=false;video.CloseWebcam();在【拍攝照片】按鈕的Click事件下添加如下代碼:privatevoidbtnPz_Click(objectsender,EventArgse)video.GrabImage(pictureBoxl.Handle,d:a.bmp);舉一反三根據(jù)本實(shí)例,讀者可以開發(fā)以下程序。無人值班視頻實(shí)時(shí)監(jiān)控系統(tǒng)。車庫安全實(shí)時(shí)監(jiān)控系統(tǒng)。實(shí)例426攝像頭監(jiān)控錄像實(shí)例說明Hnjo本例是為通過攝像頭來實(shí)現(xiàn)監(jiān)控錄像的程序。運(yùn)行本例后,單擊【開始監(jiān)控】按鈕,程序?qū)⒆詣?dòng)開始錄像,錄像文件(lx.avi)將保存在D盤根目錄下。運(yùn)行程序,效果如圖13.10所

15、示。L技術(shù)要點(diǎn)在實(shí)例“簡(jiǎn)易視頻程序”的技術(shù)要點(diǎn)中,使用的技術(shù)和相關(guān)函數(shù)已經(jīng)介紹過。在這里主要介紹如何將捕獲的視頻制作成.AVI媒體文件。實(shí)現(xiàn)技術(shù)為主要通過SendMessage函數(shù)發(fā)送Windows消息機(jī)制,消息值WM_CAP_FILE_SET_CAPTURE_FILEA和WM_CAP_SEQUENCE,分別用來設(shè)置視頻捕捉的文件名稱和初始化視頻流,捕捉視頻信息到文件:privateconstintWM_USER=0 x400;privateconstintWM_CAP_START=WM_USER;privateconstintWM_CAP_SEQUENCE=WM_CAP_START+62;p

16、rivateconstintWM_CAP_FILE_SET_CAPTURE_FILEA=WM_CAP_START+20;實(shí)現(xiàn)關(guān)鍵代碼如下:IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,hBmp.ToInt32();SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);L實(shí)現(xiàn)過程新建一個(gè)項(xiàng)目,命名為Ex13_09,默認(rèn)窗體為Form1,添加一個(gè)類文件(.CS),用于編寫視頻類。在Form1窗體中,主要添加一個(gè)PictrueBox控

17、件,用于顯示視頻;添加4個(gè)Button控件,用于開始監(jiān)控、停止監(jiān)控和監(jiān)控程序。視頻類中主要程序代碼如下:/summary/開始錄像/summary/paramname=path要保存錄像的路徑/parampublicvoidStarKinescope(stringpath)IntPtrhBmp=Marshal.StringToHGlobalAnsi(path);SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,hBmp.ToInt32();SendMessage(hWndC,WM_CAP_SEQUENCE,0,0);/summary/停止錄像/

18、publicvoidStopKinescope()SendMessage(hWndC,WM_CAP_STOP,0,0);Form1窗體中主要程序代碼如下:/開始錄像privatevoidbutton1_Click(objectsender,EventArgse)btnStar.Enabled=false;btnStop.Enabled=true;video.StarKinescope(d:lx.avi);/停止錄像privatevoidbutton2_Click(objectsender,EventArgse)btnStar.Enabled=true;btnStop.Enabled=false

19、;video.StopKinescope();舉一反三根據(jù)本實(shí)例,讀者可以開發(fā)以下程序。小區(qū)視頻監(jiān)控錄像系統(tǒng)。公司財(cái)務(wù)室視頻監(jiān)控系統(tǒng)。實(shí)例427起市攝像頭定時(shí)監(jiān)握采鋌_實(shí)例427超市攝像頭定時(shí)監(jiān)控系統(tǒng)L實(shí)例說明本實(shí)例實(shí)現(xiàn)超市攝像頭定時(shí)監(jiān)控系統(tǒng)。運(yùn)行本例后,在“定時(shí)監(jiān)控設(shè)置”處設(shè)置監(jiān)控的星期及時(shí)間,單擊【保存】按鈕,將“定時(shí)設(shè)置”參數(shù)數(shù)據(jù)保存到數(shù)據(jù)庫中。系統(tǒng)在運(yùn)行到定時(shí)時(shí)間后,程序?qū)⒆詣?dòng)進(jìn)行監(jiān)控。如圖13.11所示。另外,監(jiān)控的錄像文件和圖片文件保存在D盤根目錄中,命名格式為系統(tǒng)當(dāng)前日期。圖13.11超市攝像頭定時(shí)監(jiān)控I一技術(shù)要點(diǎn)相關(guān)技術(shù)要點(diǎn)請(qǐng)參見實(shí)例“攝像頭監(jiān)控錄像”。另外,本實(shí)例利用Time

20、r控件中的定時(shí)執(zhí)行功能,進(jìn)行數(shù)據(jù)的定時(shí)錄像工作。L實(shí)現(xiàn)過程(1)新建一個(gè)項(xiàng)目,命名為Exl3_10,默認(rèn)窗體為Forml,添加一個(gè)類文件(.CS),用于編寫視頻類。在Form1窗體中,主要添加一個(gè)PictrueBox控件,用于顯示視頻;其他控件的添加如圖13.11所示。主要程序代碼。privatevoidtimer1_Tick(objectsender,EventArgse)stringstrTime=;/星期一if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=1)strTime=DateTime.Now.ToString(HH:m

21、m);DateTimedate=Convert.ToDateTime(mtxt1.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToString()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString()+.avi);/星期二if(chk1.Checked&Convert.ToInt32(Date

22、Time.Now.DayOfWeek)=2)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt2.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToString()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.T

23、oString()+.avi);/星期三if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=3)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt3.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToString()+DateTime.Today.Day.ToString()+DateTime.Now.Hour.ToStrin

24、g()+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString()+.avi);/星期四if(chk1.Checked&Convert.ToInt32(DateTime.Now.DayOfWeek)=4)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt4.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToStringO+

25、DateTime.Today.Day.ToStringO+DateTime.Now.Hour.ToStringO+DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToStringO+.avi);/星期五if(chkl.Checked&Convert.ToInt32(DateTime.Now.Day0fWeek)=5)strTime=DateTime.Now.ToString(HH:mm);DateTimedate=Convert.ToDateTime(mtxt5.Text);if(strTime=date.ToString(HH:mm)video.StarKinescope(d:+DateTime.Today.Month.ToStringO+DateTime.Today.Day.ToString

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論