C_操作攝像頭new_第1頁
C_操作攝像頭new_第2頁
C_操作攝像頭new_第3頁
C_操作攝像頭new_第4頁
C_操作攝像頭new_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、O.DLL:包含一套特殊的DrawDib函數(shù),用來處理程序上的視頻操作。l     MCIAVI.DRV:包括對VFW的MCI命令解釋器的驅(qū)動程序。l     AVIFILE.DLL:包含由標(biāo)準(zhǔn)多媒體I/O(mmio)函數(shù)提供的更高級的命令,用來訪問.AVI文件。l     ICM:壓縮管理器,用于管理的視頻壓縮/解壓縮的編譯碼器。l     ACM:音頻壓縮管理器,提供與ICM相似的服務(wù),適用于波形音頻。其中13.4節(jié)所有的實例主要使用AVICAP32.DLL中的函數(shù)和US

4、ER32.DLL中的函數(shù),函數(shù)語法及結(jié)構(gòu)如下。(1)capCreateCaptureWindow函數(shù)該函數(shù)用于創(chuàng)建一個視頻捕捉窗口。語法如下:        DllImport("avicap32.dll")        public static extern IntPtr capCreateCaptureWindowA(byte lpszWindowName, int dwStyle, int x, int y, int nWid

5、th, int nHeight, IntPtr hWndParent, int nID);參數(shù)說明如下。l     lpszWindowName:標(biāo)識窗口的名稱。l     dwStyle:標(biāo)識窗口風(fēng)格。l     x、y:標(biāo)識窗口的左上角坐標(biāo)。l     nWidth、nHeight:標(biāo)識窗口的寬度和高度。l     hWnd:標(biāo)識父窗口句柄。l     nID:標(biāo)識窗口ID。l    

6、; 返回值:視頻捕捉窗口句柄。(2)SendMessage函數(shù)用于向Windows系統(tǒng)發(fā)送消息機(jī)制。DllImport("User32.dll")private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);參數(shù)說明如下。l     hWnd:窗口句柄。l     wMsg:將要發(fā)送的消息。l     wParam、lParam:消息的參數(shù),每個消息都有兩個參數(shù),參數(shù)設(shè)置由發(fā)送

7、的消息而定。實現(xiàn)過程(1)新建一個項目,命名為Ex13_08,默認(rèn)窗體為Form1,添加1個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加1個PictrueBox控件,用于顯示視頻;添加4個Button控件,用于打開視頻、關(guān)閉視頻、拍攝照片和退出程序。(3)主要程序代碼。視頻類中主要實現(xiàn)打開視頻、關(guān)閉視頻以及通過視頻拍攝照片的功能。代碼如下:    public class VideoAPI  /視頻API類            /

8、  視頻調(diào)用        DllImport("avicap32.dll")        public static extern IntPtr capCreateCaptureWindowA(byte lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);  

9、60;     DllImport("avicap32.dll")        public static extern bool capGetDriverDescriptionA(short wDriver, byte lpszName, int cbName, byte lpszVer, int cbVer);        DllImport("User32.dll")

10、        public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);        DllImport("User32.dll")        public static extern bool SendMessage(IntPtr hWnd, i

11、nt wMsg, short wParam, int lParam);        /  常量        public const int WM_USER = 0x400;        public const int WS_CHILD = 0x40000000;        public cons

12、t int WS_VISIBLE = 0x10000000;        public const int SWP_NOMOVE = 0x2;        public const int SWP_NOZORDER = 0x4;        public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;   

13、;     public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11;        public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5;        public const int WM_CAP_SET_PREVIEW = WM_USER + 50;    

14、;    public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;        public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;        public const int WM_CAP_START = WM_USER;        p

15、ublic const int WM_CAP_SAVEDIB = WM_CAP_START + 25;        public class cVideo     /視頻類            private IntPtr lwndC;       /保存無符號句柄      

16、;  private IntPtr mControlPtr; /保存管理指示器        private int mWidth;        private int mHeight;        public cVideo(IntPtr handle, int width, int height)      &

17、#160;             mControlPtr = handle; /顯示視頻控件的句柄            mWidth = width;      /視頻寬度            mHeight =

18、height;    /視頻高度                / <summary>        / 打開視頻設(shè)備        / </summary>        public void

19、 StartWebCam()                    byte lpszName = new byte100;            byte lpszVer = new byte100;         

20、   VideoAPI.capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100);            this.lwndC = VideoAPI.capCreateCaptureWindowA(lpszName, VideoAPI.WS_CHILD | VideoAPI.WS_VISIBLE, 0, 0, mWidth, mHeight, mControlPtr, 0);   

21、         if (VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_CONNECT, 0, 0)                            VideoAPI.SendMessage(lwn

22、dC, VideoAPI.WM_CAP_SET_PREVIEWRATE, 100, 0);                VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEW, true, 0);                 &

23、#160;          / <summary>        / 關(guān)閉視頻設(shè)備        / </summary>        public void CloseWebcam()         

24、;           VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_DISCONNECT, 0, 0);                /   <summary>          

25、; /   拍照        /   </summary>           /   <param   name="path">要保存bmp文件的路徑</param>           public void

26、 GrabImage(IntPtr hWndC, string path)                    IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);            VideoAPI.SendMessage(lwndC, VideoAPI.W

27、M_CAP_SAVEDIB, 0, hBmp.ToInt32();              Form1窗體中通過調(diào)用視頻類中的方法來實現(xiàn)相應(yīng)的功能。在【打開視頻】按鈕的Click事件中添加如下代碼:        private void button1_Click(object sender, EventArgs e)         

28、;           btnPlay.Enabled = false;            btnStop.Enabled = true;            btnPz.Enabled = true;      

29、      video = new cVideo(pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height);            video.StartWebCam();        在【關(guān)閉視頻】按鈕的Click事件中添加如下代碼:       

30、; private void b_stop_Click(object sender, EventArgs e)                    btnPlay.Enabled = true;            btnStop.Enabled = false;  

31、0;         btnPz.Enabled = false;            video.CloseWebcam();        在【拍攝照片】按鈕的Click事件下添加如下代碼:        private void btnPz_Click(obje

32、ct sender, EventArgs e)                    video.GrabImage(pictureBox1.Handle, "d:a.bmp");        舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。  無人值班視頻實時監(jiān)控系統(tǒng)。  車庫安全實時監(jiān)控系統(tǒng)。實例426攝像頭

33、監(jiān)控錄像實例說明本例是為通過攝像頭來實現(xiàn)監(jiān)控錄像的程序。運行本例后,單擊【開始監(jiān)控】按鈕,程序?qū)⒆詣娱_始錄像,錄像文件(lx.avi)將保存在D盤根目錄下。運行程序,效果如圖13.10所示。技術(shù)要點在實例“簡易視頻程序”的技術(shù)要點中,使用的技術(shù)和相關(guān)函數(shù)已經(jīng)介紹過。在這里主要介 紹如何將捕獲的視頻制作成 .AVI媒體文件。實現(xiàn)技術(shù)為主要通過SendMessage函數(shù)發(fā)送Windows消息機(jī)制,消息值 WM_CAP_FILE_SET_CAPTURE_FILEA和WM_CAP_SEQUENCE,分別用來設(shè)置視頻捕捉的文件名稱和初始化視頻流,捕捉視 頻信息到文件:  &

34、#160;     private const int WM_USER = 0x400;        private const int WM_CAP_START = WM_USER;        private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;        private cons

35、t int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;實現(xiàn)關(guān)鍵代碼如下:            IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);            SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, hB

36、mp.ToInt32();            SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);實現(xiàn)過程(1)新建一個項目,命名為Ex13_09,默認(rèn)窗體為Form1,添加一個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加一個PictrueBox控件,用于顯示視頻;添加4個Button控件,用于開始監(jiān)控、停止監(jiān)控和監(jiān)控程序。(3)視頻類中主要程序代碼如下:      

37、  /   <summary>           /   開始錄像        /   </summary>           /   <param   name="path">

38、要保存錄像的路徑</param>           public void StarKinescope(string path)                    IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);    &#

39、160;       SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, hBmp.ToInt32();            SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);               

40、; / <summary>        / 停止錄像        / </summary>        public void StopKinescope()                 

41、0;  SendMessage(hWndC, WM_CAP_STOP, 0, 0);        (4)Form1窗體中主要程序代碼如下:/開始錄像        private void button1_Click(object sender, EventArgs e)               

42、60;    btnStar.Enabled = false;            btnStop.Enabled = true;            video.StarKinescope("d:lx.avi");        /停止錄像 &

43、#160;      private void button2_Click(object sender, EventArgs e)                    btnStar.Enabled = true;            btnStop.En

44、abled = false;            video.StopKinescope();        舉一反三根據(jù)本實例,讀者可以開發(fā)以下程序。  小區(qū)視頻監(jiān)控錄像系統(tǒng)。  公司財務(wù)室視頻監(jiān)控系統(tǒng)。實例427超市攝像頭定時監(jiān)控系統(tǒng)實例說明本實例實現(xiàn)超市攝像頭定時監(jiān)控系統(tǒng)。運行本例后,在“定時監(jiān)控設(shè)置”處設(shè)置監(jiān)控的星期 及時間,單擊【保存】按鈕,將“定時設(shè)置”參數(shù)數(shù)據(jù)保存到數(shù)據(jù)庫中。系統(tǒng)在

45、運行到定時時間后,程序?qū)⒆詣舆M(jìn)行監(jiān)控。如圖13.11所示。另外,監(jiān)控的錄像 文件和圖片文件保存在D盤根目錄中,命名格式為系統(tǒng)當(dāng)前日期。圖13.11  超市攝像頭定時監(jiān)控技術(shù)要點相關(guān)技術(shù)要點請參見實例“攝像頭監(jiān)控錄像”。另外,本實例利用Timer控件中的定時執(zhí)行功能,進(jìn)行數(shù)據(jù)的定時錄像工作。實現(xiàn)過程(1)新建一個項目,命名為Ex13_10,默認(rèn)窗體為Form1,添加一個類文件(.CS),用于編寫視頻類。(2)在Form1窗體中,主要添加一個PictrueBox控件,用于顯示視頻;其他控件的添加如圖13.11所示。(3)主要程序代碼。    

46、60;   private void timer1_Tick(object sender, EventArgs e)                    string strTime=""            /星期一    

47、        if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek)=1)                            strTime = DateTime.Now.ToStri

48、ng("HH:mm");                DateTime date = Convert.ToDateTime(mtxt1.Text);                if (strTime = date.ToString("HH:mm")

49、60;                   video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.T

50、oString() + ".avi");                        /星期二            if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWee

51、k) = 2)                            strTime = DateTime.Now.ToString("HH:mm");              

52、  DateTime date = Convert.ToDateTime(mtxt2.Text);                if (strTime = date.ToString("HH:mm")                  &

53、#160; video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi");             

54、60;          /星期三            if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 3)                 &#

55、160;          strTime = DateTime.Now.ToString("HH:mm");                DateTime date = Convert.ToDateTime(mtxt3.Text);        

56、0;       if (strTime = date.ToString("HH:mm")                    video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString()

57、 + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi");                        /星期四       &#

58、160;    if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 4)                            strTime = DateTime.Now.ToString("HH:mm&quo

59、t;);                DateTime date = Convert.ToDateTime(mtxt4.Text);                if (strTime = date.ToString("HH:mm")   

60、60;                video.StarKinescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + "

61、.avi");                        /星期五            if (chk1.Checked && Convert.ToInt32(DateTime.Now.DayOfWeek) = 5)  

62、;                          strTime = DateTime.Now.ToString("HH:mm");                DateTime da

63、te = Convert.ToDateTime(mtxt5.Text);                if (strTime = date.ToString("HH:mm")                    video.StarKi

64、nescope("d:" + DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".avi");                        /星期六     

溫馨提示

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

評論

0/150

提交評論