音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

實(shí)現(xiàn)OpenCV的視頻圖像處理

出處:郭 暉1,陳 光1,2 發(fā)布于:2011-09-03 19:14:24

  嵌入式ARM及ARM-Linux操作系統(tǒng)已廣泛應(yīng)用于工業(yè)控制、通信、醫(yī)療儀器等各個(gè)領(lǐng)域。ARM設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點(diǎn)。適用于多種領(lǐng)域,比如嵌入控制、消費(fèi)/教育類(lèi)多媒體、DSP和移動(dòng)式應(yīng)用等。 許多公共場(chǎng)所和居民小區(qū)等地點(diǎn)都安裝了視頻監(jiān)控系統(tǒng),因而視頻監(jiān)控與顯示終端的應(yīng)用越來(lái)越廣泛。

  本文以嵌入式ARM作為硬件,ARM異步響應(yīng)方式異步響應(yīng)方式ARM也是一種非平衡數(shù)據(jù)鏈路操作方式,與NRM不同的是,ARM下的傳輸過(guò)程由從站啟動(dòng)。從站主動(dòng)發(fā)送給主站的一個(gè)或一組幀中可包含有信息,也可以是僅以控制為目的而發(fā)的幀。在這種操作方式下,由從站來(lái)控制超時(shí)和重發(fā)。該方式對(duì)采用輪詢(xún)方式的多站鏈路來(lái)說(shuō)是必不可少的。采用上述平臺(tái)具有以下優(yōu)點(diǎn):(1)ARM-Linux與OpenCV庫(kù)同為開(kāi)源的軟件,開(kāi)發(fā)者不僅可以根據(jù)需要修改源代碼來(lái)提高軟件開(kāi)發(fā)的靈活性,而且可以節(jié)約開(kāi)發(fā)成本;(2) OpenCV庫(kù)提供了許多視頻圖像處理的函數(shù),因此開(kāi)發(fā)者不需要花費(fèi)大量的時(shí)間自己編寫(xiě),可以提高軟件的開(kāi)發(fā)效率;(3)OpenCV庫(kù)中大部分函數(shù)都經(jīng)過(guò)匯編優(yōu)化,基于OpenCV的程序運(yùn)行起來(lái)有更高的效率。

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

  硬件由三部分組成:(1)攝像頭。負(fù)責(zé)采集原始視頻流數(shù)據(jù);(2)ARM開(kāi)發(fā)板。負(fù)責(zé)處理原始的視頻流數(shù)據(jù);(3)LCD液晶顯示器。負(fù)責(zé)圖像數(shù)據(jù)的顯示。軟件部分也由三部分組成,這三部分運(yùn)行在ARM-Liunx操作系統(tǒng)下:(1)攝像頭驅(qū)動(dòng)程序;(2)攝像頭應(yīng)用程序;(3)LCD顯示驅(qū)動(dòng)程序。

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

  1.1 硬件平臺(tái)

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

  Pentium 4的設(shè)計(jì)目標(biāo)是適應(yīng)更快的時(shí)鐘速度,因?yàn)橄M(fèi)者開(kāi)始依據(jù)更高的時(shí)鐘購(gòu)買(mǎi)計(jì)算機(jī),是Intel生產(chǎn)的第7代x86微處理器,并且是繼1995年出品的Pentium Pro之后的款重新設(shè)計(jì)過(guò)的處理器,首款產(chǎn)品代碼為:Willamette,擁有1.4GHz左右的內(nèi)核時(shí)鐘,并使用Socket 423腳位架構(gòu),不同于Pentium II、Pentium III和各種Celeron處理器,因?yàn)槭侨略O(shè)計(jì)的產(chǎn)品,所以與Pentium Pro的關(guān)聯(lián)很小。值得注意的是,Pentium 4有著非??焖俚?00MHz的前端總線,之后更有提升到533MHz、800MHz。它其實(shí)是一個(gè)為100MHz的四條并列總線 ,因此理論上它可以傳送比一般總線多四倍的容量,所以號(hào)稱(chēng)有400MHz的速度。

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

  1.2 軟件開(kāi)發(fā)平臺(tái)

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

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

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

  在開(kāi)發(fā)攝像頭應(yīng)用程序之前,要把u-boot、ARM-Linux操作系統(tǒng)和外部設(shè)備的驅(qū)動(dòng)程序移植進(jìn)入ARM目標(biāo)板270-S中,這樣主機(jī)PC上開(kāi)發(fā)的各類(lèi)應(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)成:

 ?。?)在ARM-Linux QT/Qtopia圖形操作系統(tǒng)下的窗口界面設(shè)計(jì)(即人機(jī)界面的設(shè)計(jì))。

 ?。?)對(duì)視頻流數(shù)據(jù)進(jìn)行處理,并把處理完成的圖像數(shù)據(jù)顯示在QT/Qtopia圖形界面下。

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

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

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

  2.2.1 OpenCV簡(jiǎn)介

  OpenCV于1999年由Intel建立,現(xiàn)在由Willow Garage提供支持。OpenCV是一個(gè)基于BSD許可證授權(quán)(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列 C 函數(shù)和少量 C++ 類(lèi)構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。

  2.2.2 嵌入式QT與Qtopia簡(jiǎn)介

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

  Qtopia 是Trolltech 公司為采用嵌入式Linux 操作系統(tǒng)的消費(fèi)電子設(shè)備而開(kāi)發(fā)的綜合應(yīng)用平臺(tái), Qtopia包含完整的應(yīng)用層、靈活的用戶(hù)界面、窗口操作系統(tǒng)、應(yīng)用程序啟動(dòng)程序以及開(kāi)發(fā)框架。 擁有窗口操作系統(tǒng),游戲和多媒體,工作輔助應(yīng)用程序,同步框架,PIM應(yīng)用程序,Internet應(yīng)用程序,開(kāi)發(fā)環(huán)境,輸入法 Java集成,本地化支持,個(gè)性化選項(xiàng),無(wú)線支持等特點(diǎn)。

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

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

  4 視頻圖像處理與顯示

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

  其過(guò)程主要由四步組成

  (1)初始化視頻結(jié)構(gòu)

  CvCapture*capture=0;

  capture=cvCaptureFromCAM(-1);

  cvSetCaptureProperty

 ?。╟apture,CV_CAP_PROP_FRAME_WIDTH,320);

  cvSetCaptureProperty

  (capture,CV_CAP_PROP_FRAME_HEIGHT,240);

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

  OpenCV庫(kù)中用CvCapture*cvCaptureFromCAM(int index)函數(shù)對(duì)攝像頭分配視頻圖像數(shù)據(jù)流和初始化CvCapture結(jié)構(gòu)。函數(shù)參數(shù)index為攝像頭索引值。如果系統(tǒng)只有一個(gè)攝像頭或者使用哪個(gè)攝像頭都無(wú)所謂,則index的值為-1。

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

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

  關(guān)鍵代碼:

  QTimer CameraTimer->start(50,false);

  int cvGrabFrame(capture);

  IplImage*frame=cvRetrieveFrame(capture);

  如果視頻結(jié)構(gòu)初始化成功,則開(kāi)啟由QT庫(kù)提供的QTimer定時(shí)器。代碼表示為:CameraTimer->start(50,false)。參數(shù)“50”表示QT定時(shí)器每隔50 ms觸發(fā)。

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

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

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

  關(guān)鍵代碼:

  for(int y=0;y<height;y++)

  {  for(int x=0; x<width; x++)

  {  for(int i=0;i<3;i++)

  {*dst++=*frame->imageData++;}

  *dst++=0;}}

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

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

  for(int i=0;i<3;i++)

  {*dst++=*frame->imageData++;}

  *dst++=0;

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

  關(guān)鍵代碼:

  QImage image=QImage((uchar*)image32,frame->width,

  frame->height,32,NULL,0,QImage::LittleEndian);

  QPainter display(picCamera);

  display.drawImage(0,0,image);

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

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


  

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買(mǎi)家服務(wù):
賣(mài)家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見(jiàn),您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見(jiàn)一經(jīng)采納,將有感恩紅包奉上哦!