視頻監控系統的設計和實現_第1頁
視頻監控系統的設計和實現_第2頁
視頻監控系統的設計和實現_第3頁
視頻監控系統的設計和實現_第4頁
視頻監控系統的設計和實現_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

付費下載

下載本文檔

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

文檔簡介

視頻監控系統設計和實現摘要視頻監控系統是一門集計算機技術、通信技術和數字視頻技術于一體綜合系統,一直是大家關注應用技術熱點之一。它以其直觀方便、信息內容豐富而被廣泛應用于很多場所,關鍵應用領域包含教育系統、電力系統、公檢法系統、部隊系統、銀行系統、鐵路系統、稅務系統和醫療系統等,幾乎每個行業全部有多個需求。其特點有:標準化、可擴展性、可用性和可靠性、易用性、開放式結構、完善性等。本文以試驗室為背景,設計了一個試驗室視頻監控系統——當地監控系統,針對其視頻采集、存放回放等功效要求,討論軟件系統關鍵任務及處理方案。視頻采集部分使用OpenCV庫函數實現,監控采集到視頻圖像經過預定義編碼方法進行壓縮,采取當今流行MPEG4文件格式,存放借助于人機交流界面錄像功效實現,回放采取現有當地播放軟件實現。系統軟件實現基于MicrosoftVisualstudio環境,利用Qt開發。MicrosoftVisualstudio作為一個可視集成開發工具,提供了軟件代碼自動生成和可視化資源編輯功效,和傳統部分編程平臺相比,它能夠使系統含有較高效率和可用性。本系統能夠實現當地圖像信息采集、錄像、存放、回放等功效。初步試驗結果表明,系統在關鍵功效上已靠近實用化,且操作簡便、工作可靠,含有很好應用前景。關鍵詞:視頻監控,OpenCV,圖像采集,存放

DesignandImplementationofvideomonitorsystemABSTRACTVideomonitorsystemissetofcomputertechnology,communicationtechnologyanddigitalvideotechnologyintheintegrationofIntegratedSystem.Ithasalwaysbeenoneofthehottestapplicationthatpeopleconcernedabout.Withitsintuitive,thesystemiswidelyusedinmanyoccasions.Themainapplicationfieldsincludeeducationsystem,powersystem,publicsecuritysystem,theunitsystem,thebankingsystem,therailwaysystem,thetaxsystemandthemedicalsystem,almosteveryindustryhastheneeds.Features:standardization,scalability,availabilityandreliability,easeofuse,openarchitecture,integrity,andsoon.Thissystemissetinlaboratoryanddesignedofalaboratoryvideomonitor–localmonitorsystem,foritsvideocaptureandstoreplaybackfunctionrequirements,discussingmajortasksandsolutionsofsoftwaresystem.VideocapturefunctionsachievedbyOpenCVlibrary,monitoringcollectionofvideoiscodedbycompressionofthefollowingpredefined,oneoftoday'spopularfileformatMPEG4,VideoStoreachievedbyman-machinecommunicationinterfaceimplementation,playbackusingpartachievedbylocalplayersoftware.SystemsoftwarebasedonMicrosoftVisualStudioenvironment,usingQtDevelopment.MicrosoftVisualStudioasavisualintegrateddevelopmenttoolprovidedresourcesofsoftwareAutomaticCodeGenerationandvisualeditingcapabilities.Comparedwiththetraditionalprogrammingplatform,itenablessystemwithhighefficiencyandavailability.Thesystemenableslocalimageinformationcollection,recording,storageandplaybackfunction.Preliminaryexperimentalresultsshowthatthesystemonmainfunctionisapproachingthepracticalandeasytooperate,reliableandgoodprospect.KEYWORDS:videomonitor,OpenCV,imagecapture,storage目錄前言 1第1章 緒論 21.1視頻監控系統現實狀況 21.2視頻監控系統發展方向 31.3技術背景 41.3.1VisualStudio介紹 41.3.2Qt介紹 51.3.3OpenCV介紹 61.3.4Xvid介紹 71.3.5流媒體技術 8第2章需求分析 92.1項目概述 92.1.1項目目標 92.1.2功效描述 92.1.3運行環境 102.2系統操作圖 102.3運行需求 112.3.1硬件接口 112.3.2軟件接口 11第3章概要設計 123.1功效劃分及模塊介紹 123.2視頻采集模塊實現方法 123.3編碼壓縮模塊實現方法 143.4用戶界面 18第4章具體設計 204.1程序描述 204.2程序實現 204.2.1取得攝像頭驅動和版本號 214.2.2顯示圖像在用戶端 214.2.3初始化壓縮格式并開始壓縮 224.2.4回調函數 234.2.5保留文件 24結論 25謝辭 26參考文件 27前言在社會信息化日益發展今天,計算機技術、網絡技術、通信技術和多媒體技術己經滲透到人類生存活動各個領域中。伴隨社會經濟快速發展,社會公共安全也受到大家越來越多關注,安防產業作為一個新型產業發展很快速,也有好多IT企業轉型到安防產業,使安防產業在技術上、可連續發展上有了堅實基礎。視頻監控系統應運而生。視頻監控系統是安全防范系統關鍵組成部分,其信息流數字化、編碼壓縮、開放式協議,使智能網絡視頻監控系統和安防系統中各個子系統間實現無縫連接如:防盜報警系統、門禁系統。前端設備輸出數字信號也可由多網合一方法,經過網絡復用進行傳輸并在同一平臺上進行管理和控制。多年來,伴隨計算機網絡和圖像處理、傳輸技術飛速發展,視頻監控制技術也有長足發展,而且也受到大家越來越多關注。它正從傳統安防監控向管理、生產監控發展,并逐步和管理信息系統相結合,達成資源共享,為管理者提供更直觀、更有效決議信息,視頻監控不僅符合社會信息化發展趨勢,而且代表了監控行業發展方向。視頻監控系統通常過程是:在部分關鍵被監控場所安放一個或若干個攝像機拍攝監控現場,然后將視頻信號經過傳輸網絡(線纜、無線、光纖或以太網),傳到指定視頻監控中心,監控中心能夠遠程監控現場圖像,并可經過存放介質保留現場視頻數據供以后查詢取證,同時還能夠依據不一樣需要和路徑在現場安裝其它探測裝置,作為視頻監控系統輔助設備。現在大家能夠很輕易地實現視頻信號傳送和處理,得益于數字壓縮技術日益成熟。沒有經過壓縮數字圖象信號有二百多兆帶寬,模擬信號數字化以后,再經過壓縮,能夠將其帶寬壓縮到幾十、幾百Kbps范圍內。即使它們不能提供像電視那樣高幀率視頻圖象,但在大家能夠接收情況下,占用較小傳輸帶寬,提供實時高質量圖象,足以滿足通常監控場所要求。緒論視頻監控系統是安全防范技術體系中一個關鍵組成部分,它經過攝像機及其輔助設備將監視場所監控到圖像、聲音等信息傳送到監控中心,實現對特定區域監控,含有強烈安全防范能力1.1視頻監控系統現實狀況在以前,關鍵是以模擬設備為主,含攝像機和磁帶錄像機全模擬電視監控系統,稱為第一代模擬監控系統,這一階段監控系統中基礎不使用視頻監控軟件。以后到現在,伴隨計算機處理能力提升和視頻技術發展,大家利用計算機高速數據處理能力進行視頻采集和壓縮處理,利用顯示器高分辨率實現圖像多畫面顯示,大大提升了圖像質量,因為傳輸依舊采取傳統模擬視頻電纜,所以就叫第二代半模擬半數字當地視頻監控系統,這一階段使用監控軟件基礎上全部是PC單機DVR軟件。從開始,伴隨網絡帶寬提升和成本降低、硬盤容量加大和中心存放成本降低,和多種實用視頻處理技術出現,視頻監控步入了全數字化網絡時代,因為它從攝像機或網絡視頻服務器下來就直接進入網絡,以數字視頻壓縮、傳輸、存放和播放為基礎,依靠強大平臺軟件實施管理,所以稱之為第三代全網絡視頻監控管理系統。在第三代視頻監控系統中,視頻監控軟件是必不可缺,一般用戶需要使用視頻監控軟件進行日常監控功效應用,系統管理員更需要使用視頻監控軟件對監控系統中全部硬件軟件資源進行全方面管理和維護,能夠毫不夸張說,視頻監控軟件是第三代視頻監控系統關鍵。在中國外市場上,關鍵推出是數字控制模擬視頻監控和數字視頻監控兩類產品。前者技術發展已經很成熟、性能穩定,并在實際工程應用中得到廣泛應用,尤其是在大、中型視頻監控工程中應用尤為廣泛;后者是新近崛起以計算機技術及圖像視頻壓縮為關鍵新型視頻監控系統,該系統處理了模擬系統部分弊端而快速崛起,但仍需深入完善和發展。1.2視頻監控系統發展方向前端一體化、視頻數字化、監控網絡化、系統集成化、管理智能化是視頻監控系統公認發展方向,而數字化是網絡化前提,網絡化又是系統集成化基礎,所以,視頻監控發展最大特點就是數字化、網絡化、智能化、系統化。1.數字化視頻監控系統數字化是系統中信息流(包含視頻、音頻、控制等)從模擬狀態轉為數字狀態,改變了“傳統閉路電視系統是以攝像機成像技術為中心”結構,根本上改變視頻監控系統從信息采集、數據處理、傳輸、系統控制等方法和結構形式。信息流數字化、編碼壓縮、開放式協議,使視頻監控系統和安防系統中其它各子系統間實現無縫連接,并在統一操作平臺上實現管理和控制,這也是系統集成化含義。2.網絡化視頻監控系統網絡化將意味著系統結構將由集總式向集散式系統過渡,集散式系統采取多層分級結構形式,含有微內核技術實時多任務、多用戶、分布式操作系統以實現搶先任務調度算法快速響應。組成集散式監控系統硬件和軟件采取標準化、模塊化和系列化設計,系統設備配置含有通用性強、開放性好、系統組態靈活、控制功效完善、數據處理方便、人機界面友好和系統安裝、調試和維修簡單化,系統運行互為熱備份,容錯可靠等功效。系統網絡化在某種程度上打破了布控區域和設備擴展地域和數量界限。系統網絡化將實現整個網絡系統硬件和軟件資源共享和任務和負載共享,這也是系統集成一個關鍵概念。3.智能化采取計算機為控制中心,經過系統軟件實現控制界面可視化,控制環境多媒體化,能夠方便地實現對視頻切換、音頻切換、鏡頭云臺控制、報警輸入、行動輸出錄像智能化控制,進而達成對事件分析、統計、處理,實現視頻監控智能管理。4.系統化智能視頻綜合管理是用戶真正需求,依據不一樣行業、用戶不一樣,需求大致應包含視頻監控、數據采集、辦公信息、地理信息、告警聯動、數據圖像保留、網絡安全、數據安全及授權認證等管理模塊,集成了通信技術、計算機網絡技術、圖像處理技術、自動化技術、模擬安防技術和系統管理軟件技術。1.3技術背景通常監控系統是由前端設備、傳輸設備、多路視頻分配器、網絡視頻服務器、當地顯示器、終端用戶機等部分組成。前端包含:攝像機、鏡頭、云臺、防護罩等設備。傳輸部分由視頻線纜、電源線纜、控制線纜和傳輸線纜等組成。web嵌入式視頻服務器連接多路視頻輸入,集監視、錄像、多個畫面分割、畫面切換、回放檢索、打印、等功效于一體。終端用戶機實現遠程視頻回放和對云臺監控。下面針對系統中用到關鍵技術做簡明敘述。1.3.1VisualStudio介紹VisualStudio是微軟企業推出開發環境。是現在最流行Windows平臺應用程序開發環境。現在已經開發到9.0版本,也就是VisualStudio。它使開發人員能夠快速創建高質量、用戶體驗豐富而又緊密聯絡應用程序,充足展示了Microsoft開發智能用戶端應用程序構想。借助VisualStudio,采集和分析信息將變得更為簡單便捷,業務決議也會所以變得更為有效。任何規模組織全部能夠使用VisualStudio快速創建更安全、更易于管理而且更可靠應用程序。VisualStudio提供了高級開發工具、調試功效、數據庫功效和創新功效,幫助在多種平臺上快速創建目前最優異應用程序。VisualStudio包含多種增強功效,比如可視化設計器、對Web開發工具大量改善,和能夠加速開發和處理全部類型數據語言增強功效。同時為開發人員提供了全部相關工具和框架支持。為了幫助開發人員快速創建優異軟件,VisualStudio提供了改善語言和數據功效,比如語言集成查詢(LINQ),各個編程人員能夠利用這些功效更輕松地構建處理方案以分析和處理信息。1.3.2Qt介紹Qt是一個多平臺C++圖形用戶界面應用程序框架,它提供給應用程序開發者建立藝術級圖形用戶界面所需所用功效。Qt是完全方面向對象很輕易擴展,而且許可真正地組件編程。Qt是挪威QtSoftware產品,6月17日被芬蘭諾基亞企業收購。Qt4.6對全新平臺提供支持,含有強大全新圖形處理能力并支持多點觸摸和手勢輸入,讓高級應用程序和設備開發過程變得愈加輕松和愉快。自從1996年早些時候Qt進入商業領域,它已經成為全世界范圍內數千種成功應用程序基礎。含有以下優點:1.優良跨平臺特征Qt支持下列操作系統:MicrosoftWindows95/98,MicrosoftWindowsNT,linux,Solaris,SunOS,HP-UX等等。2.面向對象Qt良好封裝機制使得Qt模塊化程度很高,可重用性很好,對于用戶開發來說是很方便,Qt提供了一個稱為signals/slots安全類型來替換callback,這使得各個元件之間協同工作變得十分簡單。3.豐富APIQt包含多達250個以上C++類,還替供基于模板collections,serialization,file,I/Odevice,directorymanagement,date/time類甚至還包含正則表示式處理功效。5.大量開發文檔6.XML支持1.3.3OpenCV介紹OpenCV是Intel資助開源計算機視覺庫。它由一系列C函數和少許C++類組成,實現了圖像處理和計算機視覺方面很多通用算法。OpenCV擁有包含300多個C/C++函數跨平臺中、高層API,它不依靠和其它外部庫,盡管也能夠使用一些外部庫。OpenCV對非商業應用和商業應用全部是無償。現在OpenCV庫包含以下多個模塊:1.CxCore:包含部分基礎功效。從“core關鍵"名字能夠看出,該庫提供了全部OpenCV運行時部分最基礎數據結構,包含矩陣,數組基礎運算,包含犯錯處理部分基礎函數。具體分為下面若干部分:(1)基礎結構(2)數組操作(3)動態結構(4)繪圖函數(5)數據保留和運行時類型信息(6)其它混合函數(7)錯誤處理和系統函數2.Cv:圖像處理和計算機視覺功效,這是關鍵函數庫,包含圖像處理、結構分析、運動分析、物體跟蹤、模式識別和攝像機標定等功效。3.CvAux:附加庫函數,包含部分試驗性函數。4.HighGUI:交互部分,HighHGUI只是用來建立快速軟件原形或是試驗用。它設計意圖是為用戶提供簡單易用圖形用戶接口。通常,你需要讀入源圖像到你程序或輸出結果圖像到磁盤。另外,需要簡單方法顯示圖像到監視器而且向許可(受限)用戶提供輸入。OpenCV功效關鍵包含以下:1.圖像數據操作包含分配、釋放、復制、設置和轉換。2.圖像和視頻輸入輸出I/O文包含件和攝像頭輸入、圖像和視頻文件輸出。3.矩陣和微量操作和線性代數算法程序包含矩陣積、解議程、特征值和奇異值等。4.各個動態數據結構包含列表、隊列、集合、樹、圖等。5.數字圖像處理包含濾波、邊緣檢測、角點檢測、采樣和差值、色彩轉換、形態操作、直方圖、圖像金字塔等。6.結構分析包含連接部件、輪廓處理、距離變換、各自距計算、模板匹配、Hough變換、多邊形迫近、直線擬合、橢圓擬合等。7.攝像頭定標包含發覺和跟蹤定標模式、定標、矩陣估量、齊次矩陣估量、立體對應。8.運動分析包含光流、運動分割、跟蹤。9.目標識別如特征法、隱馬爾可夫模式。10.GUI實現圖像和視頻顯示、鍵盤和鼠標事件處理、滾動條等和圖像標注如線、二次曲線、多邊形、文字。1.3.4Xvid介紹Xvid(舊稱為XviD)是一個開放原始碼MPEG-4視頻編解碼器,它是基于OpenDivX而編寫,性能得到極大提升,被認為是現在世界上速度最快mpeg4codec。Xvid特點:1.多個編碼模式2.單重固定碼流壓縮3.單重質量模式動態碼流壓縮4.單重量化模式動態碼流壓縮5.雙重動態碼流壓縮模式,使視頻在占用空間及畫面質量之間取得最好平衡6.量化方法和范圍控制7.運動偵測和曲線平衡分配8.多級運動偵測精度,半像素插值9.動態關鍵幀距10.心理視覺亮度修正xvid有兩種編碼方法:singlepass和twopass分別實現mpeg4標準中simpleprofile和advancedsimpleprofile兩種模式要求。1.3.5流媒體技術伴隨互聯網普及,利用網絡傳輸聲音和視頻信號需求也越來越大。廣播電視等媒體上網后,也全部期望經過互聯網來公布自己音視頻節目。不過,音視頻在存貯時文件體積通常全部十分龐大。在網絡帶寬還很有限情況下,花幾十分鐘甚至更長時間等候一個音視頻文件傳輸,不能不說是一件讓人頭疼事。流媒體技術出現,在一定程度上使互聯網傳輸音視頻難局面得到改善。傳統網絡傳輸音視頻等多媒體信息方法是完全下載后再播放,下載常常要花數分鐘甚至數小時。而采取流媒體技術,就可實現流式傳輸,將聲音、影像或動畫由服務器向用戶計算機進行連續、不間斷傳送,用戶無須等到整個文件全部下載完成,而只需經過幾秒或十幾秒開啟延時即可進行觀看。當聲音視頻等在用戶機器上播放時,文件剩下部分還會從服務器上繼續下載。流式傳輸技術又分兩種,一個是次序流式傳輸,另一個是實時流式傳輸。次序流式傳輸是次序下載,在下載文件同時用戶能夠觀看,不過,用戶觀看和服務器上傳輸并不是同時進行,用戶是在一段延時后才能看到服務器上傳出來信息,或說用戶看到總是服務器在若干時間以前傳出來信息。在這過程中,用戶只能觀看已下載那部分,而不能要求跳到還未下載部分。次序流式傳輸比較適合高質量短片段,因為它能夠很好地確保節目播放最終質量。因為它能夠很好地確保節目播放最終質量。它適合于在網站上公布供用戶點播音視頻節目。在實時流式傳輸中,音視頻信息可被實時觀看到。在觀看過程中用戶可快進或后退以觀看前面或后面內容,不過在這種傳輸方法中,假如網絡傳輸情況不理想,則收到信號效果比較差。在利用流媒體技術時,音視頻文件要采取對應格式,不一樣格式文件需要用不一樣播放器軟件來播放,所謂“一把鑰匙開一把鎖”。第2章需求分析視頻監控系統是安防和信息技術相結合高科技產物,在安全防范,案件偵破,校園監考,賽事督管方面作用突出。科技發展方向和水平是帶動整個市場需求和建設進程原動力,進而為社會平安,友好提供強有力保障。2.1項目概述本視頻監控系統是用戶端軟件部分,是整個網絡視頻監控系統一部分,在VisualStudio和Qt環境下編譯,運行,經過OpenCV庫函數實現視頻采集,顯示,拍照功效,采取Xvid技術實現視頻壓縮存放。在Windows平臺下,用戶可經過主界面菜單來實施操作,實現靜態畫面捕捉、視頻采集、存放和回放等功效。此部分也是最關鍵,因為只有有效控制采集跟壓縮,得到信息才會有價值,傳輸起來方便,快捷。2.1.1項目目標計算機操作系統,優異開發平臺上,利用現有軟件,配置一定硬件,開發一個含有開放體系結構、易擴充、易維護、含有良好人機交互界面視頻監控系統,實現視頻靜態畫面捕捉,視頻錄制等功效。2.1.2功效描述本系統從攝像頭實時采集視頻并顯示,相片拍照,預覽和管理。可將采集到視頻文件壓縮成MPEG4格式文件保留,并可播放保留MPEG4文件。用戶在主界面可直接看到采集窗口,顯示目前捕捉到畫面,更有快捷按鈕實現相片拍照,和視頻錄制開始和結束,也可自行設置相片存放路徑,大小,質量等,錄制結束后視頻文件自動編碼壓縮存放在指定位置,在文件操作菜單中能夠打開并預覽照片和視頻,在主界面下方顯示拍攝相片,也可方便預覽,同時刪除變可視化,更人性化設計了退出系統操作菜單,避免因操作不妥引發瓦解。2.1.3運行環境首先硬環境方面計算機配置主流全部能夠滿足需求,外置攝像頭也很關鍵,性能要好,那樣畫面會更清楚。軟環境方面本系統是在VisualStudio和Qt環境下編譯運行。2.2系統操作圖進入系統進入系統是否進入系統主界面是否開始視頻錄制拍照參數設置視頻回放圖2-1系統操作圖是否進入系統是本系統運行首要條件,進入后出現系統主界面,這里用戶可方便實現全部操作,包含靜態畫面捕捉、視頻采集、存放和回放等功效。2.3運行需求運行需求包含硬件接口和軟件接口。2.3.1硬件接口攝像頭:中星微ZC030XUSB攝像頭,CMOSOV511。嵌入式平臺:S3C2440ARM9開發板。2.3.2軟件接口在Windows系統下使用了OpenCV部分庫函數(cvCreateFileCapture,cvCreateCameraCapture,cvGrabFrame,cvQueryFrame)和封裝類(VideoCaptureDevice,V4L1VideoCaptureDevice,CvVideoCaptureDevic)功效實現攝像頭控制,使用XviD庫函數(xvid_global(),xvid_decore()和xvid_encore())進行MPEG4視頻解壓縮:xvid_global()實現全局初始化,獲取XviD和硬件功效信息(全局信息),色場空間裝換功效;xvid_decore()為Xvid解碼關鍵函數,xvid_encore()是對輸入原始圖像進行編碼,輸出符合MPEG4標準要求碼流。第3章概要設計本章節是在系統需求分析基礎上,對視頻監控系統做概要設計。關鍵處理了實現該系統需求程序模塊設計問題。包含怎樣把該系統劃分成若干個模塊、決定各個模塊之間接口、模塊之間傳輸信息。3.1功效劃分及模塊介紹1模塊名稱:視頻采集模塊模塊功效:從攝像頭實時采集畫面及視頻錄制模塊實現:借助OpenCV庫函數(cvCreateFileCapture,cvCreateCameraCapture等)實現2模塊名稱:編碼壓縮模塊模塊功效:視頻壓縮存放模塊實現:借助XviD三個關鍵接口函數(xvid_global(),xvid_decore()和xvid_encore())實現3.2視頻采集模塊實現方法本系統支持多平臺多操作系統,對多個攝像頭采集方法支持,使用工廠模式進行封裝,提供了統一攝像頭視頻采集接口。如有新采集方法,只需修改文件videocapturedevicefactory.cpp內容即可。先將系統類層次結構列出,下面將具體簡紹實現各個模塊功效第三方類庫。VideoCaptureDeviceVideoCaptureDeviceCvVideoCaptureDeviceV4L1VideoCaptureDeviceQWidgetVideoCaptureViewQMainWindowVMSMainWindowVideoCaptureDeviceFactoryCameraSettingsQDialogQToolButtonThumbButtonXvidVideoCaptureDeviceXvidEncode圖3-1類層次結構視頻采集模塊功效關鍵經過OpenCV第三方庫函數實現,1.初始化從文件中獲取視頻,函數原型為:CvCapture*cvCreateFileCapture(constchar*filename);filename視頻文件名。函數cvCreateFileCapture給指定文件中視頻流分配和初始化CvCapture結構。2.初始化從攝像頭中獲取視頻,函數原型為:CvCapture*cvCreateCameraCapture(intindex);index要使用攝像頭索引。假如只有一個攝像頭或用哪個攝像頭也無所謂,那使用參數-1應該便能夠。函數cvCreateCameraCapture給從攝像頭視頻流分配和初始化CvCapture結構。現在在Windows下可使用兩種接口:VideoforWindows(VFW)和MatroxImagingLibrary(MIL);Linux下也有兩種接口:V4L和FireWire。3.釋放以上兩個結構,使用函數cvReleaseCapture,原型為:voidcvReleaseCapture(CvCapture**capture);capture視頻獲取結構指針。函數cvReleaseCapture釋放由函數cvCreateFileCapture或cvCreateCameraCapture分配CvCapture結構。4.從攝像頭或視頻文件中抓取幀,函數原型為:intcvGrabFrame(CvCapture*capture);capture視頻獲取結構。函數cvGrabFrame從攝像頭或文件中抓取幀。被抓取幀在內部被存放。這個函數目標是快速抓取幀,這一點對同時從多個攝像頭讀取數據同時是很關鍵。5.取回由函數cvGrabFrame抓取圖像,函數原型為:IplImage*cvRetrieveFrame(CvCapture*capture);capture視頻獲取結構。函數cvRetrieveFrame返回由函數cvGrabFrame抓取圖像指針。返回圖像不能夠被用戶釋放或修改。6.從攝像頭抓取并返回一幀函數原型為:IplImage*cvQueryFrame(CvCapture*capture);capture視頻獲取結構。函數cvQueryFrame從攝像頭中抓取一幀,然后解壓并返回這一幀。這個函數僅僅是函數cvGrabFrame和函數cvRetrieveFrame在一起調用組合。返回圖像不能夠被用戶釋放或修改。抓取后,capture被指向下一幀,可用cvSetCaptureProperty調整capture到適宜幀。3.3編碼壓縮模塊實現方法編碼壓縮模塊經過預定義Xvid編碼方法進行壓縮,采取當今流行MPEG4文件格式存放。之所以采取MPEG4文件格式是因為MPEG4在1995年7月開始研究,1998年11月被ISO/IEC同意為正式標準,它不僅針對一定比特率下視頻編碼,愈加重視系統交互性和靈活性。MPEG4尤其針對低帶寬等條件設計算法,節省存放空間,而且圖像質量好。對于MPEG4視頻編碼關鍵來說,XviD多種算法設計全部有代表性優異意義。1.多個編碼模式:除了最原始單重估定碼流壓縮(1-passCBR)之外,XviD提供了包含:單重質量模式動態碼流壓縮、單重量化(Quantization)模式動態碼流壓縮、和包含外部控制和內部控制兩種雙重(2-pass)動態碼流壓縮模式。2.量化(Quantization)方法和范圍控制量化(Quantization),簡單說就是在編碼時經過對時間或空間上相鄰畫面單元進行同化、模糊細節程度,是對畫面質量最基礎控制原因。除了量化方法選擇,XviD還提供了強大對壓縮過程中量化幅度范圍控制。用戶能夠選定壓縮時許可使用量化幅度范圍。3.心理視覺亮度修正除了基礎MPEG4編碼外,XviD還提供了不少附加功效。其中經典就是心理視覺亮度修正。這個功效可能經過去除肉眼不能分辨亮度信號和亮度差異,來提升壓縮效率。4.畫面優化譯碼不僅在編碼上XivD擁有強大功效,在譯碼時畫面優化方面,XviD也有很多新建樹。比如"Horizontaldeblock(Y)"能夠柔化水平方向亮度馬賽克;"Horizontaldeblock(C)"能夠柔化水平相色度馬賽克;"Deringing(Y)"能夠柔化環狀亮度色斑;"Deinging(C)"能夠柔化環狀色度色斑;"mosquito"能夠降低畫面中蚊狀噪斑。相信很快未來,XviD就能夠把MPEG4編碼優勢發揮到極致,成為網上視頻統計格式盟主。XvidAPI接口定義很清楚,本模塊經過其三個關鍵接口函數(xvid_global(),xvid_decore()和xvid_encore())實現上述功效。xvid_global()函數原型:intxvid_global(void*handle,intopt,void*param1,void*param2)功效:1.全局初始化2.獲取XviD和硬件功效信息(全局信息)3.色場空間裝換參數1.handle,是一個句柄,代表著一個XviDglobal操作實例2.opt,指定要實施操作,對應上面三種功效,opt分別可取XVID_GBL_INIT、XVID_GBL_INFO、XVID_GBL_CONVERT這么三個值3.param1,是對應操作入口參數或出口參數。當opt為XVID_GBL_INIT時,param1是入口參數,應該為一個xvid_gbl_init_t類型指針;當opt為XVID_GBL_INFO時,param1是出口參數,應該為一個xvid_gbl_info_t類型指針;當opt為XVID_GBL_CONVERT時,param1是入口參數,應該為一個xvid_gbl_convert_t類型指針;4.param2,這個參數將被忽略,通常應該設置為NULL.返回值:成功:返回0失敗:返回對應錯誤碼(<0)xvid_decore()此為Xvid解碼關鍵函數,其函數原型為:Intxvid_decore(void*handle,intopt,void*param1,void*param2);參數1.handle,是一個句柄,用來代表一個Xvid解碼操作實例;2.opt,指定xvid_decore()函數要實施操作。Opt可取以下值之一;XVID_DEC_CREATE、XVID_DEC_DESTROY、XVID_DEC_DECORE。和xvid_global()函數不一樣,在實施解碼操作時,必需先創建一個Xvid解碼實例(XVID_DEC_CREATE),然后進入解碼循環(XVID_DEC_DECODE),在解碼循環完成以后應該銷毀一開始創建Xvid解碼實例(XVID_DEC_DESTORY)。3.param1,是一個通用指針類型,具體應該指向什么依據opt參數取值而定,比如,當opt取值為XVID_DECCREATE是,param1應該指向一個xvid_dec_create_t類型結構體。對于opt為XVID_DEC_CREATE和XVID_DEC_DECODE情形。param1

全部是必需參數。對于opt為XVID_DEC_DESTORY情況,param1參數將被忽略,通常設置為NULL即可。4.param2,是一個可選參數,只在opt為XVID_DEC_DECODE時候有效,指向一個xvid_dec_stats_t類型結構體。xvid_encore()函數xvid_encore()是對輸入原始圖像進行編碼,輸出符合MPEG4標準要求碼流。和xvid_decore()函數工作步驟一樣:xvid_encore()函數使用方法也是先創建一個Xvid編碼實例;然后實施實際編碼操作;最終,在全部解碼過程全部結束以后,銷毀所創建Xvid實例。不過,和xvid_decore()相比,xvid_encore()函數使用要復雜部分,關鍵原因是編碼過程參數設置要麻煩部分,xvid_encore()函數原型定義以下:intxvid_encore(void*handle,intopt,void*param1,void*paeam2);參數1.handle,編碼實例句柄,用來代表一個xvid編碼實例;2.opt,指定xvid_encore()函數要實施操作。Opt可取以下值之一;XVID_ENC_CREATE、XVID_ENC_DESTORY、XVID_ENC_ENCORE。在實施編碼操作時,必需先創建一個XviD編碼實例(XVID_ENC_CREATE),然后進入編碼循環(XVID_ENC_ENCORE),在編碼循環完成以后應該銷毀所創建XviD編碼實例(XVID_ENC_DESTORY)。3.param1,是一個通用指針類型,具體應該指向什么依據opt參數取值而定。當opt值為XVID_ENC_CREATE時,param1應該指向一個xvid_enc_create_t類型結構體。對于opt為XVID_ENC_CREATE和XVID_ENC_ENODE情形,param1全部是必需參數。對于opt為XVID_ENC_DESTORY情況,param1應該為NULL.4.Param2,是一個可選參數,只在opt為XVID_ENC_ENCODE時候有效,指向一個xvid_dec_stats_t類型結構體。返回值:成功:對于opt為XVID_ENC_CREATE和XVID_ENC_DESTORY情形,xvid_encore()函數返回0表示成功,對于opt為XVID_ENC_ENCODE情形,xvid_encore()函數返回輸出字節數表示實施成功;失敗:對于opt為XVID_ENC_CREATE和XVID_ENC_DESTORY情形,xvid_encore()函數返回小于0錯誤碼表示實施失敗,對于opt為XVID_ENC_ENCODE情形,xvid_encore()函數返回0表示該幀不應該被寫入。3.4用戶界面圖3-1程序主界面實現系統全部功效包含視頻錄制,拍照,照片參數設置,和視頻回放主菜單操作說明:文件打開:打開已錄制MPEG4視頻文件并播放設置選擇:參數設置圖像采集拍照:拍照圖像采集刪除:刪除所選中圖片視頻錄制開始:開始錄制MPEG4視頻視頻錄制結束:停止錄制MPEG4視頻圖3-2設置對話框可由用戶自行設置存放路徑,相片大小及質量操作菜單說明:存放路徑:相冊存放路徑尺寸:相片拍照大小質量:相片質量(JPEG格式)第4章具體設計本章節任務是在概要設計基礎上設計模塊程序步驟、算法和數據結構,和具體實現過程。4.1程序描述整個系統用戶界面是在Qt環境下設計實現,外部經過攝像頭采集信息,內部經過部分對象模型實現通信和事件觸發功效,這部分功效實現依靠于Qt部分特征,包含:1.一個相關無縫對象通訊被稱為信號和槽很強大機制2.可查詢和可設計屬性3.強大事件和事件過濾器4.依據上下文進行國際化字符串翻譯其中最關鍵是信號和槽機制,信號和槽用于對象間通訊。信號/槽機制是Qt一個中心特征而且是Qt和其它工具包最不相同部分。在圖形用戶界面編程中,我們常常期望一個窗口部件一個改變被通知給另一個窗口部件。更通常地,我們期望任何一類對象能夠和其它對象進行通訊。比如,假如我們正在解析一個XML文件,當我們碰到一個新標簽時,我們可能期望通知列表視圖我們正在用來表示XML文件結構。此時我們使用信號和槽。當一個特定事件發生時候,一個信號被發射。Qt窗口部件有很多預定義信號,不過我們總是能夠經過繼承來加入我們自己信號。槽就是一個能夠被調用處理特定信號函數。Qt窗口部件又很多預定義槽,不過通常習慣是你能夠加入自己槽,這么你就能夠處理你所感愛好信號。4.2程序實現這部分關鍵描述了系統部分功效具體實現方法。4.2.1取得攝像頭驅動和版本號取得視頻獲取結構屬性,函數原型為:doublecvGetCaptureProperty(CvCapture*capture,intproperty_id);capture視頻獲取結構。property_id屬性標識。能夠是下面之一:CV_CAP_PROP_POS_MSEC-影片現在位置,為毫秒數或視頻獲取時間戳CV_CAP_PROP_POS_FRAMES-將被下一步解壓/獲取幀索引,以0為起點CV_CAP_PROP_POS_AVI_RATIO-視頻文件相對位置(0-影片開始,1-影片結尾)CV_CAP_PROP_FRAME_WIDTH-視頻流中幀寬度CV_CAP_PROP_FRAME_HEIGHT-視頻流中幀高度CV_CAP_PROP_FPS-幀率CV_CAP_PROP_FOURCC-表示codec四個字符CV_CAP_PROP_FRAME_COUNT-視頻文件中幀總數函數cvGetCaptureProperty取得攝像頭指定屬性,或視頻文件指定屬性。4.2.2顯示圖像在用戶端1.圖像載入函數函數cvLoadImage載入指定圖像文件,并返回指向該文件IplImage指針。函數支持bmp、jpg、png、tiff等格式圖像。其函數原型以下:IplImage*cvLoadImage(constchar*filename,intiscolor);其中,filename是待載入圖像名稱,包含圖像擴展名;iscolor是一個輔助參數項,可選正數、零和負數三種值,正數表示作為三通道圖像載入,零表示該圖像作為單通道圖像,負數表示載入圖像通道數由圖像文件本身決定。2.圖像顯示函數函數cvShowImage是在指定窗口中顯示圖像,其函數原型以下:voidcvShowImage(constchar*name,constCvArr*image);其中,name是窗口名稱,image是圖像類型指針,通常是IplImage指針。4.2.3初始化壓縮格式并開始壓縮先創建一個Xvid編碼實例,即初始化壓縮格式,然后實施實際編碼操作;創建解碼實例時,應該將xvid_encore()函數param1參數設為一個xvid_enc_create_t類型結構體地址。實例定義以下:xvid_enc_create_txvid_enc_create;intxerr;memset(&xvid_enc_create,0,sizeof(xvid_enc_create));xvid_enc_create.version=XVID_VERSION;xvid_enc_create.width=width;xvid_enc_create.height=height;xvid_enc_file=XVID_PROFILE_AS_L4;xvid_enc_create.fincr=1;xvid_enc_create.fbase=10;xerr=xvid_encore(0,XVID_ENC_CREATE,&xvid_enc_create,0);enc_handle=xvid_enc_create.handle;returnxerr;在創建了XviD解碼實例以后,緊接著事情就是進行真正編碼工作了,這也經過前面簡紹xvid_encore()函數完成了。為了完成編碼過程,xvid_encore()函數param1參數應該設定為一個指向xvid_enc_frame_t類型結構體,可選參數param2能夠指向一個xvid_enc_stats_t類型結構體。xvid_encore()函數第一個參數handle通常應該設置為創建XviD編碼實例以后得到句柄,而opt參數應該指定為XVID_ENC_ENCODE()。xvid_enc_frame_txvid_enc_frame;xvid_enc_stats_txvid_enc_stats;memset(&xvid_enc_frame,0,sizeof(xvid_enc_frame));xvid_enc_frame.version=XVID_VERSION;memset(&xvid_enc_stats,0,sizeof(xvid_enc_stats));xvid_enc_stats.version=XVID_VERSION;xvid_enc_frame.bitstream=bitstream;xvid_enc_frame.length=-1;xvid_enc_frame.input.plane[0]=image;xvid_enc_frame.input.csp=XVID_CSP_BGRA;xvid_enc_frame.input.stride[0]=width*4;xvid_enc_frame.input.csp=0;xvid_enc_frame.vol_flags=0;xvid_enc_frame.vop_flags=0;xvid_enc_frame.type=XVID_TYPE_AUTO;xvid_enc_frame.quant=0;xvid_enc_frame.motion=0;xvid_encore(enc_handle,XVID_ENC_ENCODE,&xvid_enc_frame,&xvid_enc_stats);在上述代碼中,image中保留是輸入圖像,bitstream用于保留編碼后碼流,大部分xvid_enc_frame中組員全部采取默認設置,實際上設置工作集中在設定輸入圖像和輸出流上。設置好xvid_enc_frame以后,調用xvid_encore()函數,其中第一個參數enc_handle是創建XviD編碼實例后返回實例句柄,編碼狀態經過xvid_enc_stats返回。4.2.4回調函數所謂回調函數就是根據一定形式由你定義并編寫實現內容,當發生某種事件時,而由系統或其它函數來調用函數。使用回調函數實際上就是在調用某個函數(通常是API函數)時,將自己編寫一個函數(也就是回調函數)地址作為參數傳輸給那個函數。而那個函數在需要時候,也就是某種事情發生時候,利用傳輸函數地址調用回調函數,這時你能夠利用這個機會在回調函數中處理消息或完成一定操作。回調函數只能是全局函數,或是靜態函數,因為這個函數只是在這個類中使用,所以為了維護類完整性,我們用類靜態組員函數來做回調函數。回調函數是一個經過函數指針調用函數。假如把函數指針(地址)作為參數傳輸給另一個函數,當這個指針被用為調用它所指向函數時,我們就說這是回調函數。回調函數能夠把調用者和被調用者分開,調用者不關心誰是被調用者,全部它需知道,只是存在一個含有某種特定原型、一些限制條件(如

溫馨提示

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

評論

0/150

提交評論