2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢 業(yè) 論 文</b></p><p>  論文題目 人像識別與認證——圖像的采集 </p><p>  導師姓名     </p><p>  作者姓名      </p><p>  準考證號 

2、 </p><p>  作者單位 </p><p>  完成時間 2012年 08月 21日 </p><p><b>  摘 要</b></p><p>  當今社會和經濟的快速發(fā)展,使得安全

3、、快速并準確地進行身份識別變得越來越重要。傳統(tǒng)的身份驗證方法多采用密碼,這種方法存在兩個缺點:密碼容易忘記;密碼存在被別人盜用的危險。由于生物特征是人體的內在屬性,具有很強的自身穩(wěn)定性和個體差異性,所以人體的生物特征是進行身份識別最理想的依據。使用人體生物特征識別技術進行身份驗證,克服了使用密碼的缺點?;谌讼竦纳矸菡J證是生物特征身份認證的一種方式,在抗干擾性、精確度、代價和性能等指標上要優(yōu)于其它生物特征身份認證方式。 </p&g

4、t;<p>  利用計算機分析人臉圖像,進而從中提取出有效的識別信息,用來“辨認”身份。其應用領域廣泛,近年來,人臉和面部表情識別已經吸引了更多科研人員的注意。</p><p>  本系統(tǒng)功能包括:攝像頭軟件驅動、人像抓拍、圖像文件存取,簡單比較功能。采用Visual C++ 6.0作為開發(fā)工具,運行環(huán)境為Window XP。</p><p>  系統(tǒng)通過調試DirectSh

5、ow實現對視頻設備的驅動,并對瞬時視頻實現捕捉,然后依據BMP文件格式,將捕獲的人像圖片保存為BMP位圖文件,并存在指定目錄中。采用歐氏距離的算法實現兩張人像的比較,再將比較的結果輸出到界面上。其中界面的構建完全基于VC開發(fā),具有直觀性。</p><p>  關鍵詞: 人像識別;DirectShow;BMP位圖文件;VC++</p><p><b>  Abstract</

6、b></p><p>  Nowadays, the rapid development of society and economy makes safe, fast and accurate identity becomes increasingly important. Traditional authentication method often uses a password, but this

7、approach has two disadvantages: the password easy to forget and dangers of piracy to others. Because the biometric is the intrinsic property of the human body, with strong own stability and individual differences, the bo

8、dy's biometric identity is the ideal basis of authentication. Using human biometric tech</p><p>  We use a computer to analyze the human face and then extract valid identification information, aiming to

9、"recognize" identity. Its application areas are wide and in recent years, the face and facial expression recognition have attracted more attention from researchers. </p><p>  This system features i

10、nclude: the camera software driven, portrait shoot, image and file access, simple comparison capabilities. It use Visual C++ 6.0 as its development tool and its running environment is Window XP. </p><p>  Th

11、e system, by debugging DirectShow, realizes to drive video device and capture the instantaneous video. Then according to BMP file format, we can save the captured portrait picture as a BMP bitmap file and store it in the

12、 specified directory. It uses Euclidean distance algorithm to compare two portraits, and then output the result to the interface, whose construction is entirely based on VC, with visualization.</p><p>  Key

13、words: Recognition ;DirectShow ;BMP bitmap files;VC+ +</p><p><b>  目 錄</b></p><p>  第1章 緒 論1</p><p><b>  1.1概述1</b></p><p>  1.2人像識別的優(yōu)勢2<

14、;/p><p>  1.3人像識別的應用2</p><p>  1.4國內外現狀及發(fā)展趨勢2</p><p>  第二章 開發(fā)環(huán)境及編程語言介紹4</p><p>  2.1 Visual C++ 簡介4</p><p>  2.2 C /C++語言的特點概述5</p><p>  2.3

15、 C++語言發(fā)展6</p><p>  2.4面對對象的C++語言類及繼承的特點6</p><p>  2.4.1結構體與類以及類的繼承6</p><p>  2.4.2構造函數與析構函數8</p><p>  2.4.3類中函數覆蓋的問題9</p><p>  第三章 開發(fā)技術介紹及圖像存儲格式10<

16、;/p><p>  3.1 Direct Show技術簡介10</p><p>  3.1.1 Direct Show簡介10</p><p>  3.1.2 Direct Show系統(tǒng)10</p><p>  3.2 Direct Show的下載安裝12</p><p>  3.3使用VMR技術實現視頻圖像捕獲

17、15</p><p>  3.3.1 VMR技術基礎15</p><p>  3.3.2視頻圖像捕獲類CVMR_Capture的實現16</p><p>  3.4BMP格式介紹17</p><p>  3.4.1簡介17</p><p>  3.4.2文件結構18</p><p> 

18、 第四章 人像識別與認證方法研究22</p><p>  4.1人臉檢測定位22</p><p>  4.2面部特征的提取24</p><p>  4.3人臉確認識別25</p><p>  第五章 系統(tǒng)程序的分析27</p><p>  5.1系統(tǒng)功能模塊圖27</p><p> 

19、 5.2功能模塊程序具體分析27</p><p>  5.2.1抓拍程序27</p><p>  5.2.2抓拍流程圖29</p><p>  5.2.3獲取模板程序30</p><p>  5.2.4獲取模板流程圖32</p><p>  5.3系統(tǒng)生成界面33</p><p> 

20、 第六章 系統(tǒng)測試與運行結果34</p><p>  6.1調試與測試34</p><p>  6.1.1程序調試34</p><p>  6.1.2分調34</p><p>  6.1.3總調34</p><p>  6.2系統(tǒng)測試34</p><p>  第七章 技術經濟分析3

21、6</p><p>  7.1技術分析36</p><p>  7.2經濟分析36</p><p><b>  結 論39</b></p><p><b>  致 謝40</b></p><p><b>  參考文獻41</b></p

22、><p>  附錄1 中文翻譯42</p><p>  附錄2 外文原文49</p><p><b>  第1章 緒 論</b></p><p>  以計算機和網絡為代表的信息技術,具有國際化、社會化、開放化、個性化的特點,在提供了“信息共享”的同時,也使得信息安全問題倍受關注,能否進行正確的身份認證已成為解決問題的關

23、鍵。</p><p>  傳統(tǒng)的身份認證方式,如密碼、證件、電子卡等,容易被遺忘、丟失和偽造,基于生物特征的身份認證因其廣泛性、唯一性、穩(wěn)定性、攜帶方便、易采集等特點,被稱為“可能改變世界的十大新興技術”之一。基于人像識別的身份認證在抗干擾性、精確度、代價、性能等指標上綜合比較,優(yōu)于基于聲音、指紋、掌紋、虹膜、簽名等特征的身份認證。</p><p>  基于人像識別的身份認證利用計算機對給

24、定的靜止圖像或者動態(tài)圖像序列進行處理,對人臉部部件特征和之間的關系進行分析,從中提取出有效的認證信息,基于已有的人像數據庫來“辨認”或者“確認”一個或多個人的身份?;谌讼褡R別的身份認證技術以其出眾的用戶友好性和易用性等特點,成為了一項非常有潛力的身份認證技術。</p><p><b>  1.1概述</b></p><p>  人像識別,又叫人臉識別,特指利用分析比

25、較人臉視覺特征信息進行身份鑒別的計算機技術。廣義的人像識別實際包括構建人像識別系統(tǒng)的一系列相關技術,包括人臉圖像采集、人臉定位、人像識別預處理、身份確認以及身份查找等[1];而狹義的人像識別特指通過人臉進行身份確認或者身份查找的技術或系統(tǒng)。</p><p>  人像識別是一項熱門的計算機技術研究領域,它屬于生物特征識別技術,是對生物體(一般特指人)本身的生物特征來區(qū)分生物體個體。生物特征識別技術所研究的生物特征包

26、括臉、指紋、手掌紋、虹膜、視網膜、聲音(語音)、體形、個人習慣(例如敲擊鍵盤的力度和頻率、簽字)等,相應的識別技術就有人像識別、指紋識別、掌紋識別、虹膜識別、視網膜識別、語音識別(用語音識別可以進行身份識別,也可以進行語音內容的識別,只有前者屬于生物特征識別技術)、體形識別、鍵盤擊識別、簽字識別等。一般來說,人像識別系統(tǒng)包括圖像攝取、人臉定位、圖像預處理、以及人像識別(身份確認或者身份查找)。系統(tǒng)輸入一般是一張或者一系列含有未確定身份的

27、人臉圖像,以及人臉數據庫中的若干已知身份的人臉圖象或者相應的編碼,而其輸出則是一系列相似度得分,表明待識別的人臉的身份。</p><p>  1.2人像識別的優(yōu)勢</p><p>  人像識別的優(yōu)勢在于其自然性和不被被測個體察覺的特點。 </p><p>  所謂自然性,是指該識別方式同人類(甚至其他生物)進行個體識別時所利用的生物特征相同。例如人像識別,人類也是通

28、過觀察比較人臉區(qū)分和確認身份的,另外具有自然性的識別還有語音識別、體形識別等,而指紋識別、虹膜識別等都不具有自然性,因為人類或者其他生物并不通過此類生物特征區(qū)別個體。 </p><p>  不被察覺的特點對于一種識別方法也很重要,這會使該識別方法不令人反感,并且因為不容易引起人的注意而不容易被欺騙。人像識別具有這方面的特點,它完全利用可見光獲取人臉圖像信息,而不同于指紋識別或者虹膜識別,需要利用電子壓力傳感器采集

29、指紋,或者利用紅外線采集虹膜圖像,這些特殊的采集方式很容易被人察覺,從而更有可能被偽裝欺騙。</p><p>  1.3人像識別的應用</p><p>  人像識別的應用主要有: </p><p> ?。?)公安刑偵破案:通過查詢目標人像數據尋找數據庫中是否存在重點人口基本信息。例如在機場或車站安裝系統(tǒng)以抓捕在逃案犯。 </p><p>  

30、(2)門禁系統(tǒng):受安全保護的地區(qū)可以通過人像識別辨識試圖進入者的身份。 </p><p> ?。?)攝像監(jiān)視系統(tǒng):例如在機場、體育場、超級市場等公共場所對人群進行監(jiān)視,以達到身份識別的目的。例如在機場安裝監(jiān)視系統(tǒng)以防止恐怖分子登機。 </p><p> ?。?)網絡應用:利用人像識別輔助信用卡網絡支付,以防止非信用卡的擁有者使用信用卡等。</p><p>  1.4

31、國內外現狀及發(fā)展趨勢</p><p>  從20世紀60年代末至今,基于人像識別的認證研究的發(fā)展經歷了如下四個階段:</p><p> ?。?)基于簡單背景的人像識別階段:這是人像識別身份認證研究的初級階段。始于60年代末,通常利用人像器官的局部特征來描述人像。但由于人像器官沒有顯著的邊緣且易受到表情的影響。因此它僅限于正面人像(變形較小)的識別。</p><p>

32、 ?。?)基于多姿態(tài)/表情的人像識別階段:這是人像識別身份認證研究的發(fā)展階段。始于70年代末,但到90年代初才被人們真正關注,進行專門研究。</p><p>  (3)動態(tài)跟蹤人像識別階段:這是人像識別身份認證研究的實用化階段。始于9O年代末,特別是“9.11”事件促進了動態(tài)人臉跟蹤技術的快速發(fā)展。</p><p> ?。?)三維人臉識別階段:為了獲得更多的特征信息。直接利用二維人臉圖像合

33、成三維人臉模型進行識別也成為該領域的一個主要研究方向。</p><p>  目前,國內及國外均已出現成型的基于人像識別的身份認證系統(tǒng),國外有Facelt,FaceVACS,Cognitec,Identix和Eyematic,美國A4Vision還推出3D人像識別系統(tǒng);國內有清華大學承擔的國家“十五”攻關項目——人像識別系統(tǒng)、銀晨智能識別有限公司研制的嵌入式人像識別系統(tǒng)、廣州超越數碼科技有限公司的BioFace系統(tǒng)

34、等。這些產品取得了較好的認證效果。</p><p>  第二章 開發(fā)環(huán)境及編程語言介紹</p><p>  2.1 Visual C++ 簡介</p><p>  Visual C++提供了可視化的集成開發(fā)環(huán)境,包括AppWizard、WorkSpace、ClassWizard和WizardBar等實用開發(fā)工具。Visual C++即VC,微軟公司出品的高級可視化計

35、算機程序開發(fā)工具。他提供了一套開發(fā)環(huán)境:Visual Studio,Visual Studio本身包括一個文本編輯器、資源編輯器、工程編譯工具、一個增量連接器、源代碼瀏覽器、集成調試工具,以及一套聯機文檔,借助這套工具,用戶可以隨心所欲地開發(fā)出各種功能的應用軟件以及借助OpenGL和DirectX技術開發(fā)游戲軟件。Visual C++可以識別C/C++并編譯,支持MFC類庫,并提供了一系列模板,常用的MFC AppWizard(EXE/

36、DLL),MFC ActiveX ControlWizard,Win32 Application,Win32 Console Application,ATL COM AppWizard。這種可視化編程環(huán)境可以令程序員花更多精力在程序功能的實現上,而不是底層的建設上,這就大大加快了程序開發(fā)速度和效率,這也是Visual C++一個顯著的特點。利用Visua</p><p>  (1)是Windows環(huán)境下最主要的應

37、用開發(fā)系統(tǒng)之一</p><p>  (2)是C++語言的集成開發(fā)環(huán)境</p><p>  (3)與Win32緊密相連</p><p>  (4)強大的調試功能為大型的復雜軟件的開發(fā)提供了有效地排錯手段</p><p>  開發(fā)環(huán)境是程序員同VC的交互界面,通過它可以創(chuàng)建工程文件、訪問資源編輯、使用內部調試、訪問程序源代碼。</p>

38、<p>  利用API函數編寫Windows應用程序,必須先了解以下內容:</p><p><b>  (1)窗口的概念</b></p><p>  窗口是系統(tǒng)管理應用程序的基本單位,是應用程序與用戶接口之間交互的接口環(huán)境,是Win應用程序基本操作單元。</p><p>  編寫一個Windows應用程序首先應創(chuàng)建一個或多個窗口,

39、隨后應用程序的運行過程即窗口的內部,窗口與窗口之間,窗口與系統(tǒng)之間進行數據處理與數據交換的過程。</p><p><b>  (2)事件驅動概念</b></p><p>  Windows程序設計是針對事件或消息處理進行。程序執(zhí)行順序取決于事件發(fā)生順序,程序的執(zhí)行順序是由順序產生的消息驅動的。</p><p><b>  (3)句柄&

40、lt;/b></p><p>  應用程序通過句柄來訪問相應的對象信息。一個四字節(jié)長的數值,用于標示應用程序中不同的對象和同類對象中不同的實例。</p><p><b>  (4)消息</b></p><p>  Windows應用程序利用Windows消息與應用程序及系統(tǒng)進行信息交換。</p><p>  2.2

41、 C /C++語言的特點概述</p><p><b>  (1)C語言特點</b></p><p>  C語言系列的編程語言是當今非常流行的程序設計語言,它是由Dennis Richie在貝爾實驗室研制開發(fā)的一個具有通用性的結構化程序設計語言,它融匯了高效,靈活等設計思想,具有較高的可移植性。</p><p>  在實際運用過程中可以發(fā)現,C語

42、言的一個重要的特色是大量使用函數。比如,所有用C語言編寫的程序都必須具有一個名為main的函數,該函數是程序的入口,也就是程序的執(zhí)行起點,程序將一次執(zhí)行main函數中的定義的代碼,直至main函數的執(zhí)行完畢,因此,main函數被成為主函數[2]。 除主函數外,C語言允許使用系統(tǒng)定義的其他函數,也允許使用自定義的函數。</p><p>  C語言餓另一個重要特點是,比起其他編程語言來,C語言的使用非常靈活。比如在使

43、用典型的結構化語言pascal時,必須要實現在指定的區(qū)域聲明變量或函數,然后在另一指定位置實現函數等。又比如,使用QBASIC語言,需要指定每行語句的行號,程序將按代碼的行號依次執(zhí)行。C語言在變量聲明、函數定義、語言的組織、算法設計等方面并沒有過于嚴格的限制。</p><p>  C語言區(qū)別于其他編程語言的特點是允許通過使用指針訪問變量或函數的存儲空間。由于C語言允許使用指針,使得它可以對計算機硬件進行控制,這個

44、特點是其他高級程序語言不具備的。</p><p>  另外,C語言允許用戶使用自己定義的數據類型,這使得C語言在數據處理方面具有更大的優(yōu)勢,程序員可以更具需要定義數據類型,并設計相應的算法。</p><p>  (2)C++語言特點</p><p>  C語言本身也存在一些局限,不如:C語言不支持代碼重用,C語言對類型的檢查機制相對較弱。為了解決C語言自身所具有的諸

45、多問題,1980年,貝爾實驗室的Bjarne Stroutstrup博士及其同時開始對C語言進行該經和擴充,并使C++語言在C語言的基礎上發(fā)展起來。</p><p>  在基本語法特點方面,C++語言保持與C語言兼并,二者沒有本質上的差別,大多數使用C語言編寫的代碼可以在C++語言中直接使用。這也是C++語言很快普及的一個重要原因。C++語言與C語言的主要區(qū)別是編程思想上的更新,即編碼由面向過程變?yōu)槊嫦驅ο?,基?/p>

46、此,C++語言引入了類與對象機制,包括類的定于,類的繼承與派生,類的多態(tài)性等。在類定義方面,C++語言一方面自定義結構類型進行擴充,另一方面也支持新的類構造。數據封裝和隱藏是與類的定義緊密相關,并且在C++語言中經常碰到的現象,也是C++語言中的一大特點。</p><p>  2.3 C++語言發(fā)展</p><p>  C++語言發(fā)展大概可以分為三個階段:第一階段從80年代到1995年。這

47、一階段C++語言基本上是傳統(tǒng)類型上的面向對象語言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據了相當大份額;第二階段從1995年到2000年,這一階段由于標準模板庫(STL)和后來的Boost等程序庫的出現,泛型程序設計在C++中占據了越來越多的比重性。當然,同時由于Java、C#等語言的出現和硬件價格的大規(guī)模下降,C++受到了一定的沖擊;第三階段從2000年至今,由于以Loki、MPL等程序庫為代表的產生式編程和模板元編程

48、的出現,C++出現了發(fā)展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最復雜的一員。</p><p>  2.4面對對象的C++語言類及繼承的特點</p><p>  2.4.1結構體與類以及類的繼承</p><p>  類主要由三個部分構成:類名,數據成員和成員函數。</p><p>&l

49、t;b>  格式如下:</b></p><p><b>  Class 類名</b></p><p><b>  { </b></p><p><b>  Public:</b></p><p><b>  共有數據成員;</b><

50、/p><p><b>  共有成員函數;</b></p><p>  Protected:</p><p><b>  保護數據成員;</b></p><p><b>  保護成員函數;</b></p><p><b>  Private:<

51、/b></p><p><b>  私有數據成員;</b></p><p><b>  私有成員函數;</b></p><p><b>  };</b></p><p>  類的聲明有關鍵字class開始,后面是類名,花括號中是類體,最后以一個分號結束。</p>

52、;<p> ?、俪绦蛑腥魏卧L問對象的地方都能夠訪問在成員訪問限定符public。</p><p>  ②在成員訪問符private:后面和下一個成員訪問符之間所有數據成員和成員函數都只能被該類的成員函數訪問。</p><p>  ③在protected:之后和下一個訪問說明符之間的所有數據成員和成員函數稱為類的保護成員。保護成員可以被本類的成員函數訪問,也可以有本類派生類的成

53、員函數訪問,或被類的友元函數訪問,而類外的任何其它函數訪問都是非法的[3]。</p><p>  在C++語言中,結構體中可以包含函數。在c++中,類和結構體可以通用,結構體也是一種特殊的類,但也有一定的區(qū)別。如果沒有public,類成員不能被外面訪問。用struct結構體定義時,在缺省狀態(tài)下,所有成員都是public,用class類定義時,在缺省狀態(tài)下,所有成員都是private。</p><

54、;p>  表2-1類的繼承訪問特性</p><p> ?、俟欣^承時,基類中的公有成員和保護成員可被派生類中成員函數訪問,基類中僅有公有成員才可被派生類的對象訪問。</p><p>  ②保護繼承時,將使基類中的公有成員和保護成員成為派生類的保護成員;這使得派生類的對象不能訪問基類中的任何成員,而派生類的成員函數可以訪問基類中的公有成員和保護成員。</p><p&

55、gt; ?、鬯接欣^承時,派生類的成員函數可訪問基類中的公有成員和保護成員;派生類對象不能訪問基類的任何成員。</p><p>  2.4.2構造函數與析構函數</p><p>  構造函數是一個的類的成員函數,主要用于為對象分配內存空間并進行初始化,在創(chuàng)建類對象時自動調用,除了具有一般成員函數的特點之外,它還有以下特點:</p><p> ?、贅嬙旌瘮底钪匾淖饔檬?/p>

56、創(chuàng)建對象本身</p><p>  ②C++規(guī)定,每個類必須有一個構造函數,沒有構造函數,就不能創(chuàng)建任何對象。</p><p>  ③C++又規(guī)定,如果一個類沒有提供任何的構造函數,則C++提供一個默認的構造函數(由C++編譯器提供),這個默認構造函數是一個不帶參數的構造函數,它只負責創(chuàng)建對象,而不做任何初始化工作。</p><p>  ④只要一個類定義了一個構造函數

57、,不管這個構造函數是否是帶參數的構造函數,c++就不再提供默認的構造函數。也就是說,如果為一個類定義了一個帶參數的構造函數,還想要無參數的構造函數,則必須自己定義。</p><p> ?、菔桥c類同名的成員函數,不能指定返回值類型和返回值,可以有任意類型的參數,用于初始化類的數據成員。</p><p>  析構函數是類的一個特殊的成員函數,它執(zhí)行與構造函數相反的操作,通常用于撤銷對象時的一些

58、清理任務,它的特點如下:</p><p> ?、贈]有返回值類型和返回值,而且不能重載,在撤銷對象時,編譯器會自動調用析構函數。</p><p> ?、谝粋€對象生命周期結束時,其所占有的內存空間就要被收回,這個工作就有析構</p><p><b>  函數來完成。</b></p><p> ?、畚鰳嫼瘮凳欠聪虻臉嬙旌瘮担?/p>

59、構函數不允許有返回值,更重要是析構函數不允許帶參數,并且一個類只能有一個析構函數。</p><p>  ④析構函數與構造函數作用相反,對象超出其作用范圍,對應的內存空間被系統(tǒng)收回或被程序用delete刪除時,析構函數被調用。</p><p> ?、莞鶕鰳嫼瘮颠@種特點,我們可以在構造函數中初始化對象的某些成員變量,給其分配內存空間,在析構函數中釋放對象運行期間所申請的資源。</p&g

60、t;<p>  2.4.3類中函數覆蓋的問題</p><p>  函數的覆蓋發(fā)生在父類與子類之間。當父類與子類有同一特性函數,但子類稍有區(qū)別,而且子類此函數沒有特殊聲明,就可能發(fā)生子類特性被父類覆蓋。</p><p>  如果派生類需要對繼承的成員函數重新定義功能而非覆蓋該函數,則該函數在基類中應該定義為虛函數,通過在成員函數名前面加virtual實現,這樣,當通過基類指針調

61、用該成員函數時,c++能自動判斷調用哪一個類的成員函數。</p><p>  一句話:在基類函數前面加上virtual,如果說子類有的函數,調用子類的,子類沒有的,調用父類的。</p><p>  第三章 開發(fā)技術介紹及圖像存儲格式</p><p>  3.1 Direct Show技術簡介</p><p>  3.1.1 Direct Sh

62、ow簡介</p><p>  Direct Show是DirectX家族成員中為在Windows平臺上處理各種格式的多媒體文件的回放、音視頻采集等高性能要求的多媒體應用提供了完整的解決方案;DirectShow集成了DirectX家族中其他成員(如DirectDraw、DirectSound等)的技術,為我們的多媒體應用提供了一下的方便:</p><p>  ①保證了數據量巨大的多媒體應用

63、數據處理的高效性。</p><p> ?、诮鉀Q了音頻和視頻時刻保持同步。</p><p>  ③用最簡單的方法處理復雜的多媒體源問題,包括本地文件、計算機網絡、廣播電視以及其他一些數碼產品等。</p><p>  ④提供了解決處理各種多媒體格式文件的方法。</p><p> ?、葜С帜繕讼到y(tǒng)中不可預知的硬件變動。</p><

64、;p>  Direct Show使應用程序開發(fā)人員從復雜的數據傳輸、硬件差異、同步性等工作解脫出來,總體應用框架和底層工作由Direct Show來完成[5]。</p><p>  3.1.2 Direct Show系統(tǒng)</p><p>  圖3-1 Direct Show系統(tǒng)</p><p>  如圖3-1所示,圖中央最大的一塊即是Direct Show系統(tǒng)

65、,虛線以下是Ring 0特權級別的硬件設備,虛線以上的是Ring 3特權級別的應用層。Direct Show系統(tǒng)位于應用層中。它使用一種叫Filter Graph的模型來管理整個數據流的處理過程;參與數據處理的各個功能模塊稱為Filter;各個Filter在Filter Graph中按一定的順序連接成一條“流水線”協(xié)同工作。</p><p><b>  ①Filter</b></p&g

66、t;<p>  Filter是Direct Show中最基本的概念,是Filter Graph中最小的功能模塊,Filter是一種COM組件,一個Filter一般由一個或多個Pin組成,Filter之間也就通過Pin相互連接,構成一條順序的鏈路。按照功能來分:Filter大致分為3類:Source Filters、Transform Filters和Rendering Filters。Source Filters主要負責獲

67、取數據,數據源可以是文件、因特網計算機里的采集卡(WDM驅動的或VFW驅動的)數字攝像機等,然后將數據往下傳輸;Transform Filters主要負責數據的格式轉換,例如數據流的分離/合成、解碼/編碼等,然后將數據繼續(xù)往下傳輸;Rendering Filters主要負責數據的最終去向——將數據送給顯卡、聲卡進行多媒體的播放,或者輸出到文件進行存儲。</p><p>  每一個filter都與其他一個或幾個fi

68、lter相連,連接點也是COM對象,我們稱為pin,Filter通過pin從一個filter傳到另一個filter,從而可以使數據在filter鏈表中流動,在direct show我們稱filter鏈表為filter Graph。</p><p> ?、谠催^濾器(source filter):源過濾器引入數據到過濾器圖表中,數據來源可以是文件、網絡、照相機等。不同的源過濾器處理不同類型的數據源。 </p&g

69、t;<p> ?、圩儞Q過濾器(transform filter):變換過濾器的工作是獲取輸入流,處理數據,并生成輸出流。變換過濾器對數據的處理包括編解碼、格式轉換、壓縮解壓縮等。 </p><p> ?、芴峤贿^濾器(renderer filter):提交過濾器在過濾器圖表里處于最后一級,它們接收數據并把數據提交給外設。</p><p><b>  ⑤WDM采集設備

70、</b></p><p>  Windows驅動程序模型(Window Driver Model,WDM)是Windows 98和Windows 2000使用的新的驅動程序設計規(guī)范。使用WDM使得硬件驅動程序更加穩(wěn)定,讓操作系統(tǒng)對硬件更加有效地控制硬件。除了定義一個驅動程序與操作系統(tǒng)連接的標準接口以外,WDM也指明了驅動程序應該采用的更加模塊化的設計。</p><p>  基本

71、上,WDM規(guī)范依靠一個標準化的類驅動程序來控制一類硬件的最常用和基本的功能。Windows 2000為每一類硬件包括一個本地類驅動程序,然后,對應于某個特定廠商或者硬件型號的迷你驅動程序加入在類驅動中未包括的特殊或定制功能。廠商還可以更進一步地加入過濾器驅動程序來提供在類驅動的上層或底層進行的微調特性,以此來提供驅動程序本身和由硬件設備執(zhí)行的任務最大的效率。在絕大多數情況下,這種設計將得到各方面均兼容于Windows 2000的驅動程序

72、,提供更好的性能,消耗更少的系統(tǒng)資源,并且對驅動程序大小的縮減經常達到90%。注意此處大小指的只是廠商/型號特定驅動程序,而不包括本地類驅動程序。</p><p>  在Windows 2000中包括WDM不但擴展了支持設備的數量,也給微軟的主要網絡操作系統(tǒng)帶來了即插即用能力。盡管Windows 2000并不能支持市面上所有的硬件,它的硬件兼容性列表(Hardware Compatibility list,HCL

73、)已經遠遠大于Windows NT 4.0的系統(tǒng)的工作機制。</p><p>  事件通知機制:當某個事件發(fā)生時,比如數據流結束,產生一個錯誤等,Filter就給 Filter圖表管理器發(fā)送一個事件通知。Filter圖表管理器處理其中的一部分事件,另一部分交給應用程序處理。如果圖表管理器沒有處理一個 filter事件,它就把事件通知放入到一個隊列中,圖表管理器也可以將自己的事件通知放進隊列中。 應用程序可以自己處

74、理隊列中的事件,dshow 中的事件通知就和 windows 的消息機制差不多,filter,圖表管理器和應用程序通過這種機制就可以互相通信。</p><p>  Filter都是通過調用圖表管理器的IMediaEventSink::Notify方法來通知圖表管理器某種事件發(fā)生。事件通知包括一個事件code,這個code不僅僅代表了事件的類型,還包含兩個DWORD類型的參數用來傳遞一些其他的信息。關于事件code

75、的內容,在下面的一個專題中列出,這里暫略,使用時可以參考幫助。應用程序通過調用圖表管理器的IMediaEvent::GetEvent方法來從事件隊列中獲取事件。如果有事件發(fā)生,該函數就返回一個事件碼和兩個參數,如果沒有事件,則一直阻塞直到有事件發(fā)生和超過某個時間。</p><p>  3.2 Direct Show的下載安裝</p><p>  通過此網站http://www.direct

76、show.cn/SDK/DX9SDK.rar下載到壓縮版Direct Show,解壓到文件夾,安裝,這幾步都比較簡單,重點是如何配置到vc環(huán)境中。</p><p><b>  具體步驟如下:</b></p><p>  (1)使用VC向導生成一個具體項目,如Win32 Dynamic-Link。</p><p> ?。?)包含頭文件stream

77、s.h。</p><p> ?。?) 在VC的菜單中選擇Project|Settings|C/C++,在彈出的對話框中的Category中選擇Code generation,然后在Calling convention中選擇_stdcall。</p><p>  圖3-2 direct show的安裝</p><p> ?。?)使用多線程語言運行時庫,即在VC的菜單中

78、選擇Project|Settings|C/C++,在彈出的對話框中的Category中選擇Code generation,然后在Use run-time library中,Debug版選擇Debug Multithreaded,Release版選擇Multithreaded。</p><p>  圖3-3 direct show的安裝</p><p> ?。?) 配置必要的鏈接庫文件,即在

79、VC的菜單中選擇Project|Settings|Link,在彈出的對話框中的Category中選擇General,然后在Object/library modules中輸入如下代碼:Debug版本 strmbasd.lib, msvcrtd.lib, winmm.lib,并且選中Ignore all default libraries。DirectShow SDK建議,DirectShow應用程序應該至少連接庫文件strmiids.li

80、b和quartz.lib。前者定義了DirectShow標準的CLSID和IID,后者定義了導出函數AMGetErrorText(如果應用程序中沒有使用到這個函數,也可以不連接這個庫)。如果程序里包含了頭文件streams.h,則一般庫文件還要連接strmbasd.lib、uuid.lib、winmm.lib。</p><p>  (6)將DirectX SDK的Include和Lib目錄配置到VC的系統(tǒng)目錄中去

81、,并且放在標準的VC目錄之前,以保證編譯器能夠拿到最新版本的源文件。選擇Tools|Options|Directories,在彈出的對話框中的Show directories for中選擇Include files,配置如下(假設DirectX SDK安裝在D:\DXSDK目錄下,VC安裝在C:\Program Files下):</p><p>  D:\DXSDK\Include</p><

82、p>  D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES</p><p>  D:\DXSDK\SAMPLES\C++\COMMON\INCLUDE</p><p>  C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE</p><p>  C:\Program Fi

83、les\Microsoft Visual Studio\VC98\MFC\INCLUDE</p><p>  C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE</p><p>  再在Show directories for中選擇Library files,配置如下:</p><p>  D:\DXS

84、DK\Lib</p><p>  D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\DEBUG</p><p>  D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\RELEASE</p><p>  C:\PROGRAM FILES\MICROSOFT SDK\LIB</p>

85、<p>  C:\Program Files\Microsoft Visual Studio\VC98\LIB</p><p>  C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB</p><p> ?。?)因為DirectShow應用程序是一種COM客戶程序,因此在調用任何COM函數之前調用CoInitialize()

86、(或CoInitializeEx)函數進行COM庫的初始化(一般是在應用程序啟動的時候調用一次),在結束COM庫使用時調用CoUninitialize()函數進行反初始化(一般是在應用程序退出前調用一次)。</p><p>  配置時,應該注意的問題如下:</p><p>  ①include和lib的路徑前后順序一定要“非常嚴格按照上面順序排列”,否則 DXSDK\Include和V

87、C98\INCLUDE有頭文件名是重名的,例如control.h,strmif.h。所以要優(yōu)先選擇DXSDK的文件聲明。DXSDK\Lib和VC98\LIB對 DWORD_PTR 這個數據類型的聲明順序出現編譯上連接的歧異。</p><p> ?、贐ASECLASSES\DEBUG和BASECLASSES\RELEASE目錄和目錄里面是內容是沒有的,如果你在應用程序中使用了BASECLASSES里面的class,

88、function,filter,interface,就要先用VC編譯baseclasses.dsw,編譯時請分別選定DEBUG和RELEASE,因為baseclasses.dsw有4個版本,而且默認下都不是DEBUG和RELEASE。編譯后生成兩個重要文件:strmbasd.lib(Debug),STRMBASE.lib(Release),在以后將用到。</p><p>  3.3使用VMR技術實現視頻圖像捕獲&

89、lt;/p><p>  3.3.1 VMR技術基礎</p><p>  顯示圖像時使用的是Video Renderer視頻渲染技術,可應用于所有支持DirectX的平臺,是視頻顯示較早的技術應用,對平臺沒有特殊要求;在Windows XP操作系統(tǒng)之前是默認的顯示技術[6]。</p><p>  視頻混合渲染Video Mixing Renderer 7(VMR-7)可用

90、于WindowsXP操作系統(tǒng),且是該系統(tǒng)的默認選擇,與舊的顯示濾波器相比功能有大的提升。VMR-9是DirectShow SDK 9.0中的視頻渲染技術,采用Direct3D技術。VMR-9不是默認選擇的濾波器,對系統(tǒng)要求更高,但功能更強、效果更好,它使用了最新的圖像API函數提供了最好的顯示性能。</p><p>  視頻顯示根據有無窗口可分為有窗口模式和無窗口模式。Video Renderer只支持窗口模式,

91、VMR支持有窗口(Window)和無窗口(Windowless)兩種模式,默認支持有窗口模式。在無窗口模式中,可以把視頻和應用程序主界面的窗口捆綁。</p><p><b> ?、偈褂脽o窗口模式</b></p><p>  dshow 的視頻提交過濾器可以在窗口模式和無窗口模式下工作。在窗口模式下,過濾器創(chuàng)建一個自己的窗口,在里面播放視頻。在無窗口模式下,過濾器直接將

92、視頻在應用程序提供的窗口上顯示,過濾器本身不創(chuàng)建窗口。 </p><p><b> ?、诖翱谀J?</b></p><p>  在窗口模式下,視頻提交過濾器創(chuàng)建一個窗口,然后將視頻禎帖到窗口上,你可以將這個窗口帖到你的應用程序的窗口。</p><p>  VMR在清晰、流暢顯示視頻的同時,可以靈活地捕獲圖像幀,這也是我們選擇VMR技術的一個重要

93、原因,因為我們想直接對圖像數據進行處理。</p><p>  3.3.2視頻圖像捕獲類CVMR_Capture的實現</p><p>  為完成采集視頻、預覽視頻和捕獲圖像幀的任務,我們封裝了CVMR_Capture類,使用VMR技術流暢顯示和捕捉圖像幀。根據GraphEdit的濾波器內容和鏈表的操作,編程實現使用VMR技術顯示、捕捉圖像。</p><p>  系統(tǒng)

94、設備枚舉器為我們按類型枚舉已注冊在系統(tǒng)中的Fitler提供了統(tǒng)一的方法。而且它能夠區(qū)分不同的硬件設備,即便是同一個Filter支持它們。這對那些使用Windows驅動模型和KSProxy Filter的設備來說是非常有用的。系統(tǒng)設備枚舉器對它們按不同的設備實例進行對待。</p><p>  當我們利用系統(tǒng)設備枚舉器查詢設備的時候,系統(tǒng)設備枚舉器為特定類型的設備(如,音頻捕獲和視頻壓縮)生成了一張枚舉表(Enume

95、rator)。類型枚舉器(Category enumerator)為每個這種類型的設備返回一個Moniker,類型枚舉器自動把每一種即插即用的設備包含在內。</p><p><b>  步驟如下:</b></p><p>  ①調用方法CoCreateInstance生成系統(tǒng)設備枚舉器。類標識(CLSID)為CLSID_SystemDeviceEnum。</p&

96、gt;<p> ?、谡{用ICreateDevEnum::CreateClassEnumerator方法生成類型枚舉器,參數為你想要得到的類型的CLSID,該方法返回一個IEnumMoniker接口指針,如果指定的類型(是空的)或不存在,函數ICreateDevEnum::CreateClassEnumerator將返回S_FALSE而不是錯誤代碼,同時IEnumMoniker指針(譯注:通過參數返回)也是空的,這就要求我們

97、在調用CreateClassEnumerator的時候明確用S_OK進行比較而不是使用宏SUCCEEDED。</p><p> ?、凼褂肐EnumMoniker::Next方法依次得到IEnumMoniker指針中的每個moniker。該方法返回一個IMoniker接口指針。當Next到達枚舉的底部,它的返回值仍然是S_FALSE,這里我們仍需要用S_OK來進行檢驗。</p><p>  

98、④想要得到該設備較為友好的名稱,調用IMoniker::BindToStorage方法。</p><p> ?、萑绻胍刹⒊跏蓟芾碓撛O備的Filter調用3返回指針的IMonitor::BindToObject方法,接下來調用IFilterGraph::AddFilter把該Filter添加到視圖中[8]。</p><p>  使用VMR-9技術實現視頻的采集、存儲任務的程序。首先如

99、果再次調用該函數,則關閉所有接口、釋放有關資源;接著創(chuàng)建IGraphBuilder作為濾波器鏈表管理器;然后添加VMR濾波器到鏈表中,把指定的采集設備索引與捕獲濾波器捆綁,并把該濾波器添加到鏈表中;接著獲取捕獲濾波器的引腳、獲取媒體控制接口和事件接口;設置窗口通知消息處理,根據輸入的視頻分辨率匹配采集設備的分辨率;最后使用自動渲染功能Render方法把濾波器鏈表鏈接起來,使用媒體控制接口的方法Run開始運行媒體。</p>

100、<p>  首先使用CoCreateInstance創(chuàng)建VMR的接口pVmr,然后把VMR濾波器添加到濾波器鏈表中。設置視頻顯示為無窗口模式,首先在pVmr接口下查詢IVMRFilterConfig接口,以參數VMRMode_Windowless使用SetRenderingMode方法設置完成。最后設置傳入的窗口為視頻剪輯窗口。</p><p>  當采用無窗口的模式時,就沒有必要暴露IVideoWin

101、dow接口了。為了能夠使用VMR的缺省行為,在構建Graph圖之前必須要調整VMR。</p><p> ?、賱?chuàng)建一個過慮器圖表管理器。</p><p> ?、趧?chuàng)建一個VMR,加入到graph中。</p><p> ?、壅{用VMR的IVMRFilterConfig::SetRenderingMode方法設置VMRMode_Windowless標志。</p>

102、<p> ?、苷{用IVMRWindowlessControl::SetVideoClippingWindow給視頻指定一個顯示窗口。</p><p>  3.4BMP格式介紹</p><p><b>  3.4.1簡介</b></p><p>  BMP是英文Bitmap(位圖)的簡寫,它是Windows操作系統(tǒng)中的標準圖像文件格

103、式,能夠被多種Windows應用程序所支持。隨著Windows操作系統(tǒng)的流行與豐富的Windows應用程序的開發(fā),BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱生來的缺點--占用磁盤空間過大。</p><p>  BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環(huán)境下運行的所有圖象處理軟件都支持BMP圖象文

104、件格式。Windows系統(tǒng)內部各圖像繪制操作都是以BMP為基礎的。Windows 3.0以前的BMP圖文件格式與顯示設備有關,因此把這種BMP圖象文件格式稱為設備相關位圖DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP圖象文件與顯示設備無關,因此把這種BMP圖象文件格式稱為設備無關位圖DIB(device-independent bitmap)格式目的是為了讓Windows能夠在任何類

105、型的顯示設備上顯示所存儲的圖象。BMP位圖文件默認的文件擴展名是BMP或者bmp[9]。</p><p><b>  3.4.2文件結構</b></p><p>  位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列。&

106、lt;/p><p>  位圖文件頭 (bitmap-file header) BITMAPFILEHEADER bmfh</p><p>  位圖信息頭 (bitmap-information header) BITMAPINFOHEADER bmih </p><p>  彩色表 (color table) RGBQUAD aColors[] </p>

107、<p>  圖象數據陣列字節(jié) BYTE aBitmapBits[]</p><p>  表3-1 BMP的文件頭</p><p>  位圖文件頭包含有關于文件類型、文件大小、存放位置等信息,在Windows 3.0以上版本的位圖文件中用BITMAPFILEHEADER結構來定義: </p><p>  typedef struct tagBITMAPFIL

108、EHEADER { /* bmfh */ </p><p>  UINT bfType; </p><p>  DWORD bfSize; </p><p>  UINT bfReserved1; </p><p>  UINT bfReserved2; </p><p>  DWORD bfOffBits; <

109、/p><p>  } BITMAPFILEHEADER; </p><p><b>  其中: </b></p><p><b>  bfType </b></p><p><b>  說明文件的類型. </b></p><p><b>  bfS

110、ize </b></p><p>  說明文件的大小,用字節(jié)為單位 </p><p>  bfReserved1 </p><p>  保留,必須設置為0 </p><p>  bfReserved2 </p><p>  保留,必須設置為0 </p><p>  bfOffBits

溫馨提示

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

評論

0/150

提交評論