亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于OpenCV的視頻圖像處理應(yīng)用研究*

        2010-05-18 07:28:30,陳,2

        郭 暉 ,陳 光 ,2

        (1.東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院,上海 201620;2.東華大學(xué) 數(shù)字化紡織服裝技術(shù)教育部工程研究中心,上海 201620)

        隨著計(jì)算機(jī)和微電子技術(shù)的迅速發(fā)展,嵌入式ARM及ARM-Linux操作系統(tǒng)已廣泛應(yīng)用于工業(yè)控制、通信、醫(yī)療儀器等各個領(lǐng)域。許多公共場所和居民小區(qū)等地點(diǎn)都安裝了視頻監(jiān)控系統(tǒng),因而視頻監(jiān)控與顯示終端的應(yīng)用越來越廣泛。于是,如何以更高的效率和更低的成本設(shè)計(jì)視頻監(jiān)控設(shè)備的硬件和軟件就成為廣大研發(fā)人員關(guān)心的問題。

        本文以嵌入式ARM作為硬件核心,在ARM-Linux QT/Qtopia圖形操作系統(tǒng)下開發(fā)攝像頭應(yīng)用程序,實(shí)現(xiàn)攝像頭對視頻圖像數(shù)據(jù)的采集、處理與顯示。為了提高應(yīng)用程序的開發(fā)效率,本設(shè)計(jì)采用了OpenCV圖形處理庫。攝像頭視頻顯示的流程為:首先ARM-Linux通過攝像頭驅(qū)動程序控制攝像頭采集視頻流數(shù)據(jù),然后利用攝像頭應(yīng)用程序?qū)Σ杉降囊曨l流數(shù)據(jù)進(jìn)行處理,最終使經(jīng)過處理的視頻流數(shù)據(jù)能夠在LCD屏上顯示。采用上述平臺具有以下優(yōu)點(diǎn):(1)ARM-Linux與OpenCV庫同為開源的免費(fèi)軟件,開發(fā)者不僅可以根據(jù)需要修改源代碼來提高軟件開發(fā)的靈活性,而且可以節(jié)約開發(fā)成本;(2)OpenCV庫提供了許多視頻圖像處理的函數(shù),因此開發(fā)者不需要花費(fèi)大量的時(shí)間自己編寫,可以提高軟件的開發(fā)效率;(3)OpenCV庫中大部分函數(shù)都經(jīng)過匯編優(yōu)化,基于OpenCV的程序運(yùn)行起來有更高的效率。

        視頻監(jiān)控與顯示系統(tǒng)的硬件和軟件結(jié)構(gòu)如圖1所示。

        硬件由三部分組成:(1)攝像頭。負(fù)責(zé)采集原始視頻流數(shù)據(jù);(2)ARM開發(fā)板。負(fù)責(zé)處理原始的視頻流數(shù)據(jù);(3)LCD液晶顯示器。負(fù)責(zé)圖像數(shù)據(jù)的顯示。軟件部分也由三部分組成,這三部分運(yùn)行在ARM-Liunx操作系統(tǒng)下:(1)攝像頭驅(qū)動程序;(2)攝像頭應(yīng)用程序??刂圃贏RM板把攝像頭采集到的視頻流數(shù)據(jù)讀入內(nèi)存中,然后對內(nèi)存中的圖像數(shù)據(jù)進(jìn)行處理,即把原始圖像數(shù)據(jù)轉(zhuǎn)化為可以在ARM-Linux QT/Qtopia操作系統(tǒng)下顯示的圖像數(shù)據(jù);(3)LCD顯示驅(qū)動程序。本文將著重闡述運(yùn)行在ARM-Linux QT下的攝像頭應(yīng)用程序。

        圖1 系統(tǒng)的硬件和軟件結(jié)構(gòu)

        1 嵌入式系統(tǒng)應(yīng)用程序開發(fā)方法

        1.1 硬件平臺

        嵌入式系統(tǒng)開發(fā)平臺由主機(jī)PC機(jī)和目標(biāo)機(jī)ARM板組成。

        主機(jī)PC要求CPU為Pentium 4或以上,擁有一個25針的并口、一個9針的RS-232串口和一個20GB的硬盤。ARM板是由深圳市武耀博德信息技術(shù)有限公司生產(chǎn)的270-S平臺。

        1.2 軟件開發(fā)平臺

        軟件程序的開發(fā)是在PC機(jī)上完成的,PC機(jī)上的開發(fā)環(huán)境是Redhat Linux 9.0。Redhat提供了許多與程序開發(fā)有關(guān)的工具,還要在PC機(jī)的Linux操作系統(tǒng)下安裝QT和OpenCV軟件工具包。

        (1)QT軟件包。包括QT/X11 2.3.2庫、QT/Embedded 2.3.2庫、Qtopia 1.7.0庫、uic工具、qmake工具、tmake工具和QT designer工具等。

        (2)OpenCV軟件包。 包括 Libhighgui.so.0.9.7、Libhighgui.la、Libcxcore.so.0.9.7和 Libcxcore.la等主要的庫。

        在開發(fā)攝像頭應(yīng)用程序之前,要把u-boot、ARMLinux操作系統(tǒng)和外部設(shè)備的驅(qū)動程序移植進(jìn)入ARM目標(biāo)板270-S中,這樣主機(jī)PC上開發(fā)的各類應(yīng)用程序軟件才能在ARM目標(biāo)板上運(yùn)行。

        2 攝像頭應(yīng)用程序的構(gòu)架與關(guān)鍵技術(shù)

        2.1 攝像頭應(yīng)用程序的結(jié)構(gòu)

        應(yīng)用程序由兩部分構(gòu)成:

        (1)在ARM-Linux QT/Qtopia圖形操作系統(tǒng)下的窗口界面設(shè)計(jì) (即人機(jī)界面的設(shè)計(jì))。這部分是通過調(diào)用QT/Embedded庫的各種庫函數(shù)與窗口組件來完成的。

        (2)對視頻流數(shù)據(jù)進(jìn)行處理,并把處理完成的圖像數(shù)據(jù)顯示在QT/Qtopia圖形界面下。這部分設(shè)計(jì)是攝像頭應(yīng)用程序的核心,除了調(diào)用QT/Embedded庫函數(shù),還要調(diào)用OpenCV庫函數(shù)。

        攝像頭應(yīng)用程序結(jié)構(gòu)圖與庫函數(shù)的調(diào)用關(guān)系如圖2所示。

        圖2 攝像頭應(yīng)用程序結(jié)構(gòu)圖

        2.2 攝像頭應(yīng)用程序的關(guān)鍵技術(shù)

        本設(shè)計(jì)應(yīng)用程序以O(shè)penCV庫和QT庫為核心,負(fù)責(zé)處理視頻數(shù)據(jù)與圖像顯示。

        2.2.1 OpenCV簡介

        開放源代碼的計(jì)算機(jī)圖像處理庫OpenCV(Intel?Open Source Computer Vision Library)是由一些C函數(shù)和C++類所組成的庫,用來實(shí)現(xiàn)圖像處理及計(jì)算機(jī)圖像算法。OpenCV可以與英特爾公司所開發(fā)的圖形處理庫IPL兼容,所以它能夠高效而充分地運(yùn)行在Intel處理器上,主要用于對圖像進(jìn)行高級處理,例如特征檢測與跟蹤、運(yùn)動分析及3D重建等。

        2.2.2 嵌入式QT與Qtopia簡介

        QT是跨平臺C++圖形用戶界面工具。由于QT采用面向?qū)ο箝_發(fā),具有跨多平臺、界面設(shè)計(jì)美觀等特點(diǎn),得到廣泛應(yīng)用。因?yàn)镵DE等項(xiàng)目使用QT作為支持庫,所以有許多基于X-Windows的PC機(jī)上的應(yīng)用程序可以非常方便地移植到QT上。

        Qtopia是由Trolltech公司開發(fā)的基于QT庫的消費(fèi)電子設(shè)備綜合應(yīng)用平臺。Qtopia包含完整的應(yīng)用層、靈活的用戶界面、窗口操作系統(tǒng)、應(yīng)用程序啟動程序以及開發(fā)框架,并具有游戲和多媒體、工作輔助應(yīng)用程序、同步框架、PIM應(yīng)用程序、Internet應(yīng)用程序等。本設(shè)計(jì)應(yīng)用程序顯示在Qtopia中。

        3 QT窗體的設(shè)計(jì)方法

        在QT編程中,有兩種設(shè)計(jì)程序窗體 (即人機(jī)界面)的方法。第一種方法完全采用面向?qū)ο蟮腃++編程語言實(shí)現(xiàn),開發(fā)者需要手工編寫所有的代碼;另一種是采用編寫代碼與QT Designer設(shè)計(jì)工具相結(jié)合的方法。QT Designer工具會幫助開發(fā)者完成大部分繪制窗體的工作。本文攝像頭應(yīng)用程序的設(shè)計(jì)采用第二種方法。QT Designer是QT系統(tǒng)專用的窗口界面開發(fā)工具,它不包含任何編譯器,而僅僅提供一個可視化界面編輯器。QT Designer將編輯完成的窗體界面通過XML保存為.ui文件,然后由專用的uic界面編譯器將其轉(zhuǎn)換為標(biāo)準(zhǔn)C++的源文件。

        4 視頻圖像處理與顯示

        視頻圖像處理與顯示的過程如圖3所示。

        圖3 視頻圖像處理步驟

        其過程主要由四步組成。

        (1)初始化視頻結(jié)構(gòu)。關(guān)鍵代碼:

        在OpenCV應(yīng)用程序中都要定義一個CvCapture類型的指針變量capture。CvCapture類是視頻獲取結(jié)構(gòu),它沒有公共接口,各類圖像數(shù)據(jù)存儲位置的頭地址都可以賦值給指針變量capture。在capture指針被賦值之后,可以作為其他圖像處理函數(shù)的參數(shù)使用,完成各種圖像處理功能。

        OpenCV庫中用 CvCapture*cvCaptureFromCAM(int index)函數(shù)對攝像頭分配視頻圖像數(shù)據(jù)流和初始化CvCapture結(jié)構(gòu)。函數(shù)參數(shù)index為攝像頭索引值。如果系統(tǒng)只有一個攝像頭或者使用哪個攝像頭都無所謂,則index的值為-1。本設(shè)計(jì)開發(fā)板只連接一個攝像頭,因此代碼為 capture=cvCaptureFromCAM(-1)。

        對視頻數(shù)據(jù)結(jié)構(gòu)capture設(shè)置參數(shù)。用到的OpenCV的庫函數(shù)為int cvSetCaptureProperty(CvCapture*capture,int property_id,double value)。參數(shù)capture指定哪個視頻獲取結(jié)構(gòu)需要設(shè)置參數(shù);property_id為屬性標(biāo)識符,由幾個固定值組成,用來決定設(shè)置哪個參數(shù)。

        (2)開啟定時(shí)器后抓取圖像幀

        關(guān)鍵代碼:

        如果視頻結(jié)構(gòu)初始化成功,則開啟由QT庫提供的QTimer定時(shí) 器 。 代碼 表 示 為 :CameraTimer->start(50,false)。參數(shù)“50”表示 QT定時(shí)器每隔 50 ms觸發(fā)一次,即發(fā)出一個內(nèi)部信號調(diào)用一個槽函數(shù),該槽函數(shù)負(fù)責(zé)從視頻數(shù)據(jù)流中抓取一幀圖像。

        該槽函數(shù)抓取一幀圖像的方法為:首先調(diào)用OpenCV庫函數(shù)intcvGrabFrame(CvCapture*capture);從攝像頭實(shí)時(shí)采集的視頻流中快速抓取一幀圖像數(shù)據(jù),并且把這幀圖像數(shù)據(jù)存入ARM板的緩存中,這幀圖像數(shù)據(jù)對于用戶是不可見的。采用這種機(jī)制,是因?yàn)閏vGrabFrame()可以把一幀圖像數(shù)據(jù)以最快的速度存入緩存中[1]。

        接下來,調(diào)用 OpenCV庫函數(shù)cvRetrieveFrame()。這個函數(shù)把剛剛通過cvGrabFrame()抓取的一幀圖像數(shù)據(jù)從內(nèi)部緩存重新讀取出來。具體代碼為:IplImage*frame=cvRetrieveFrame(capture)。事實(shí)上在調(diào)用這個函數(shù)后,OpenCV內(nèi)部會完成多步復(fù)雜的圖像處理的工作,例如解碼等。

        (3)視頻格式的轉(zhuǎn)化

        關(guān)鍵代碼:

        由于cvRetrieveFrame()重新讀取到的一幀圖像數(shù)據(jù)是IplImage類型,IplImage類型是 24位真彩的三通道BGR(BGR24),而QT庫內(nèi)與圖像處理與顯示相關(guān)的函數(shù)只支持對 1 bit、8 bit或者32 bit的位圖進(jìn)行處理[2]。因此為了使IplImage類型幀圖像能夠在QT/Qtopia圖像界面中顯示,又不降低視頻圖像質(zhì)量,需要通過程序?qū)?4位(BRG24)幀圖像轉(zhuǎn)化為32位(BRG32)幀圖像。

        BGR32每一個像素點(diǎn)除了擁有與BGR24相同的紅綠藍(lán)三種顏色,每種顏色8 bit外,要還在這三種顏色共24 bit的數(shù)據(jù)后面添加一組長度為8 bit的0數(shù)據(jù)。因此,圖像格式轉(zhuǎn)化的方法應(yīng)該在原始的24位圖像數(shù)據(jù)中每隔三個字節(jié)加入一個字節(jié)的0。下列代碼為BGR24->BGR32圖像中一個點(diǎn)的轉(zhuǎn)化程序,其中frame->imageData為原始圖像的指針,dst為轉(zhuǎn)化后圖像的指針。

        (4)將視頻圖像數(shù)據(jù)顯示在QT/Qtopia圖形界面

        關(guān)鍵代碼:

        首先調(diào)用QImage構(gòu)造函數(shù)把上一步轉(zhuǎn)換好的32位(BGR32)圖像數(shù)據(jù)初始化為QT圖像數(shù)據(jù)格式;然后調(diào)用QT的低水平繪制類QPainter的構(gòu)造函數(shù)對主窗口的顯示器組建初始化;初始化結(jié)束后將調(diào)用QPainter類的drawImage成員函數(shù),把通過QImage類轉(zhuǎn)換過的圖像數(shù)據(jù)image繪制在主窗體的顯示器中,代碼為QPainter.drawImage(0,0,image)。

        通過以上步驟,應(yīng)用程序最終將攝像頭采集到的視頻圖像數(shù)據(jù)顯示在嵌入式設(shè)備的QT/qtopia圖形界面中。

        ARM平臺的手持移動監(jiān)控與顯示終端設(shè)備已經(jīng)廣泛應(yīng)用于社會的各個領(lǐng)域。OpenCV圖像處理庫以其開源性、高效性、靈活性幫助開發(fā)者大幅度地縮減開發(fā)周期。ARM-Linux QT/Qtopia與其他ARM端的圖像界面操作系統(tǒng)相比較有免費(fèi)、移植性好、內(nèi)核精簡、更加穩(wěn)定的特點(diǎn)。本設(shè)計(jì)以O(shè)penCV圖像處理庫為核心,在ARM Linux QT/Qtopia圖形界面操作系統(tǒng)下實(shí)現(xiàn)攝像頭顯示的應(yīng)用程序,有非常好的實(shí)用性,可以廣泛應(yīng)用于各類ARM終端設(shè)備中。

        [1]BRADSKI G, KAEHLER A.Learning openCV: computer vision with the OpenCV library.O’Reilly Media, 2008, 9.

        [2]Trolltech公司.Qtopia和 Qt/Embedded參考文檔 [OL].http://www.qiliang.net/qt/index.html,2005.

        [3]韋東山.嵌入式 Linux應(yīng)用開發(fā)完全手冊.北京:人民郵電出版社,2008.

        精品人妻一区二区三区蜜桃| 疯狂撞击丝袜人妻| 国产麻无矿码直接观看| 高清国产亚洲va精品| 中文字幕一区二区三区| 精品免费国产一区二区三区四区| 免费人成在线观看播放视频| 亚洲国产av综合一区| 成人欧美一区二区三区在线| 日韩电影一区二区三区| 亚洲Va中文字幕无码毛片下载| 蜜桃在线视频一区二区| 三年片免费观看影视大全视频| 国产乱妇乱子视频在播放| 97av在线播放| av在线天堂国产一区| 免费无码高潮流白浆视频| 少妇高潮尖叫黑人激情在线| 日本成人一区二区三区| 天堂av中文在线官网| 亚洲中文字幕av天堂自拍| 亚洲av无码av在线播放| 国产亚洲日韩欧美一区二区三区 | 西西人体大胆视频无码| 粉嫩的极品女神尤物在线| 极品白嫩的小少妇| 午夜一级韩国欧美日本国产| 日韩精品中文字幕人妻中出| 日本精品视频免费观看| 麻麻张开腿让我爽了一夜| 不卡无毒免费毛片视频观看| 熟女一区二区国产精品| 国产xxx69麻豆国语对白| 亚洲产国偷v产偷v自拍色戒| 国产一区二区精品久久呦| 老熟妇乱子交视频一区| 毛茸茸的中国女bbw| AV无码专区亚洲AVL在线观看| 亚洲国产精品婷婷久久| 少妇无码av无码专区| 狠狠丁香激情久久综合|