基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用_第1頁
基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用_第2頁
基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用_第3頁
基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用_第4頁
基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

精品文檔-下載后可編輯基于ARM的嵌入式USB圖像采集與顯示-設(shè)計(jì)應(yīng)用摘要:基于ARM9處理器和嵌入式Linux操作系統(tǒng),文章研究了視頻圖像采集與顯示的一般方法。以USB攝像頭采集圖像為例,介紹了Linux系統(tǒng)下基于Video4Linux進(jìn)行視頻圖像采集的一般過程,并且終通過Qt/Embedded編寫的圖形界面將采集到的視頻圖像在LCD上實(shí)時(shí)地顯示出來。

引言

目前市場上大部分的圖像采集與處理系統(tǒng)是基于DSP芯片的,這種圖像采集與處理系統(tǒng)成本高、功耗高、體積約束等特點(diǎn)并不適用于一些簡單的應(yīng)用。隨著USB攝像頭的普及和基于ARM的嵌入式芯片的快速發(fā)展,將二者結(jié)合的便攜性越來越受人們歡迎。本文介紹了一種基于三星S3C2440A芯片的嵌入式USB攝像頭圖像采集與顯示方案,該方案具有良好的可移植性和擴(kuò)展性,并且成本、大小和實(shí)時(shí)處理都能夠滿足市場需求。

1系統(tǒng)架構(gòu)

系統(tǒng)通過當(dāng)前市場上應(yīng)用廣泛的中芯微公司生產(chǎn)的zc301p芯片的USB攝像頭進(jìn)行圖像采集,然后將圖像信息傳送到ARM芯片中進(jìn)行處理,終通過基于Qt/Embedded編寫的圖形顯示程序在LCD上實(shí)時(shí)顯示。系統(tǒng)的整體架構(gòu)如圖1所示。

2視頻圖像采集

系統(tǒng)采用中芯微公司生產(chǎn)的zc301p芯片的USB攝像頭作為圖像采集設(shè)備,并介紹了基于Video4Linux編程協(xié)議進(jìn)行視頻圖像采集的一般過程。

2.1USB攝像頭驅(qū)動(dòng)

Linux內(nèi)核能夠很好地支持OHCI(開放式主機(jī)控制接口協(xié)議),并且能夠很好地支持包括OV511系列攝像頭在內(nèi)的各種各樣的USB設(shè)備,但是并不包括zc301pUSB攝像頭。直到后來2.6.27版本左右的內(nèi)核中才增加了針對zc301系列芯片的驅(qū)動(dòng),統(tǒng)稱為LinuxUVC.本文采用的是Linux版本內(nèi)核,只需要對內(nèi)核進(jìn)行簡單的配置,就可以實(shí)現(xiàn)功能了。

在配置菜單選項(xiàng)中,設(shè)備驅(qū)動(dòng)是重要的配置項(xiàng)。選擇的配置項(xiàng)如下:

DeviceDrivers---

Multimediadevices---

VideoForLinux

EnableVideoForLinuxAPI1(DEPRECATED)

Videocaptureadapters---

V4LUSBdevices---

USBVideoClass(UVC)

UVCinputeventsdevicesupport

GSPCAbasedwebcams---

ZC3XXXUSBCameraDriver

USBZC0301[P]ImageProcessorandControl

Chipsupport

現(xiàn)在,內(nèi)核被配置成可以支持Video4Linux的視頻接口,并且加入了支持zc301pUSB攝像頭的驅(qū)動(dòng)程序。

2.2基于Video4Linux的視頻圖像采集程序設(shè)計(jì)

Video4Linux(簡稱V4L)為目前市場常見的電視捕獲卡和并口及USB口的攝像頭提供統(tǒng)一的編程接口。在Linux內(nèi)核中它為用戶空間提供統(tǒng)一的編程接口,V4L分為兩層:底層是音頻和視頻設(shè)備驅(qū)動(dòng)程序的內(nèi)核;上層為系統(tǒng)提供一些API接口信息。視頻圖像采集流程如圖2所示。

(1)打開視頻設(shè)備。

在Linux中視頻設(shè)備是被作為設(shè)備文件來執(zhí)行的,本文USB攝像頭的設(shè)備文件名為/dev/video0.

intmy_v4l_open(char*dev,my_v4l_struct*vd)函數(shù)用于打開視頻設(shè)備并初始化攝像頭設(shè)備,該函數(shù)調(diào)用open函數(shù)可以讀設(shè)備文件,成功返回設(shè)備描述符,失敗返回-1.主要程序代碼如下:

intmy_v4l_open(char*dev,my_v4l_struct*vd){

if((vd-fd=open(vd-videodevice,O_RDWR))==-1){

printf("ERRORopeningV4Linterface");

exit(1);}

……}

(2)讀設(shè)備信息。

intmy_v4l_get_capability(my_v4l_struct*)函數(shù)的功能是讀取設(shè)備基本信息,它利用ioctl(vd_fd,VIDIOCGCAP,(vd-capability)來讀取有關(guān)攝像頭的信息。該函數(shù)成功返回后將這些信息從內(nèi)核空間拷貝到用戶程序空間capability各成員分量中,使用printf函數(shù)就可得到各成員分量信息。具體如下:

intmy_v4l_get_capability(my_v4l_struct*){

if(ioctl(vd-fd,VIDIOCGPICT,(vd-capability))0){

printf("error:v4l_get_capability\n");

exit(1);}

return0;}

(3)視頻圖像采集。

本文通過mmap方式來采集視頻圖像信息。為了獲得映射的幀緩沖信息,my_v4l_mmap_init(my_v4l_struct*)函數(shù)需先初始化緩沖區(qū),并進(jìn)行內(nèi)存與緩沖區(qū)的綁定,其中函數(shù)mmap用于將文件fd與video_mbuf綁定實(shí)現(xiàn)映射,函數(shù)mmap()返回值是系統(tǒng)實(shí)際分配的起始地址。函數(shù)my_v4l_mmap_init()的部分代碼實(shí)現(xiàn)如下:

voidmy_v4l_mmap_init(my_v4l_struct*vd){

……

ioctl(vd-fd,VIDIOCGMBUF,(vd-mbuf));//初始化video_mbuf以得到所映射的buffer的信息

vd-pFramebuffer=(unsignedchar*)mmap(0,

vd-videombuf.size,

PROT_READ|PROT_WRITE,MAP_SHARED,vd-fd,0);

/*把文件fd與video_mbuf綁定,實(shí)現(xiàn)映射*/

vd-mmapsize=vd-videombuf.size;

vd-vmmap.height=vd-hdrheight;

vd-vmmap.width=vd-hdrwidth;

vd-vmmap.format=vd-formatIn;

vd-vmmap.frame=0;

……}

然后利用驅(qū)動(dòng)程序的ioctl()函數(shù)的VIDIOCMCCAPTURE和VIDIOCSYNC命令來獲取圖像。其中ioctl(vd-fd,VIDIOCMCAPTURE,(vd-mmap))開始一幀圖像的采集,是非阻塞的;ioctl(vd-fd,VIDIOCSYNC,frame)用于判斷一幀圖像采集過程結(jié)束與否,frame是當(dāng)前采集的幀的序號。

采集工作結(jié)束后調(diào)用munmap取消文件fd與video_mbuf的綁定。

munmap(vd-map,vd-mbuf.size);

(4)關(guān)閉設(shè)備在視頻采集完成后,必需關(guān)閉視頻設(shè)備。

close(vd-fd);

3基于Qt/Embedded圖像顯示程序的編寫

基于嵌入式Linux常見的GUI系統(tǒng)有MiniGUI、MicroWindows、OpenGUI和基于Framebuffer[5]的Qt/Embedded[4].Qt是諾基亞開發(fā)的一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的功能,并且是完全面向?qū)ο蟮?,很容易擴(kuò)展,允許真正的組件編程。正是基于以上優(yōu)點(diǎn),本文采用Qt/Embedded開發(fā)平臺(tái),并將基于Qt的圖形界面Qtopia移入我們的文件系統(tǒng)中。

為了避免由于圖像數(shù)據(jù)量大而在目標(biāo)板上顯示閃爍的問題,本文采用雙緩沖技術(shù)實(shí)現(xiàn)采集圖像顯示,采用的是QPixmap對象。QPixmap是Qt為圖像處理提供的類,主要用于圖像的繪制。實(shí)現(xiàn)雙緩沖時(shí),先把要顯示的內(nèi)容繪制在這個(gè)QPixmappixmap對象上,然后再用一步操作把pixmap繪制在屏幕上?;赒t圖像顯示及輔助框線繪制的部分代碼段如下:

QPixmappix(width(),height());//定義一個(gè)QPixmap用于在上面繪制圖像及框線

QPainterp(pix);//定義繪制工具

QPainterQPenpen(yellow,3,DotLine);//定義一個(gè)畫筆的屬性,如顏色、粗細(xì)、線條樣式

p.drawImage(0,0,img);//把攝像頭采集到的圖像繪制到QPixmap上

p.setPen(pen);//設(shè)置畫筆屬性

p.moveTo(50,330);//設(shè)置畫筆筆尖起始位置

p.lineTo(150,50);//開始繪制框線

p.lineTo(490,50);

…略

p.end();//在QPixmap上的所有繪制任務(wù)結(jié)束

p.begin(this);//準(zhǔn)備把QPixmap繪制到屏幕上

p.drawPixmap(0,0,pix);//繪制QPixmap到屏幕操作,圖像顯示到LCD上

圖像數(shù)據(jù)的連續(xù)采集和顯示是通過定時(shí)器實(shí)現(xiàn)的,QTimer類提供了定時(shí)器信號和單觸發(fā)定時(shí)器。設(shè)置定時(shí)啟動(dòng)觸發(fā)周期,每當(dāng)定時(shí)器時(shí)間到就觸發(fā)一個(gè)定時(shí)器事件,在事件中調(diào)用VIDIOCMCAPTURE函數(shù)完成對圖像的采集,并通過QPixmap類將圖像顯示到LCD上。至此就可以通過基于Qt編寫的圖形界面程序,將USB攝像頭采集的視頻圖像在LCD上實(shí)時(shí)顯示。

4結(jié)論

本文基于ARM9處理器和嵌入式Linux

溫馨提示

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

評論

0/150

提交評論