




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程技術(shù)服務(wù)勞動(dòng)協(xié)議年
- 項(xiàng)目管理中的能力提升試題及答案
- 工程項(xiàng)目管理人才發(fā)展試題及答案
- 網(wǎng)絡(luò)游戲開發(fā)測試與上線合同
- 工程項(xiàng)目風(fēng)險(xiǎn)控制的方法試題及答案
- 小學(xué)生生命安全教育
- 提升企業(yè)核心競爭力的總結(jié)計(jì)劃
- 通過社交反饋增強(qiáng)品牌價(jià)值計(jì)劃
- 2025年工程項(xiàng)目管理核心能力試題及答案
- 工程經(jīng)濟(jì)學(xué)的應(yīng)用實(shí)例分析試題與答案
- UL300標(biāo)準(zhǔn)中文版-2019用于保護(hù)商用烹飪設(shè)備的滅火系統(tǒng)的耐火測試第四版
- 【MOOC】中西文化鑒賞-鄭州大學(xué) 中國大學(xué)慕課MOOC答案
- 事業(yè)單位考試職業(yè)能力傾向測驗(yàn)(綜合管理類A類)試題與參考答案(2024年)
- 2015-2024年十年高考數(shù)學(xué)真題分類匯編專題23 導(dǎo)數(shù)及其應(yīng)用大題綜合(學(xué)生版)
- 水土保持方案投標(biāo)文件技術(shù)部分
- 《新能源汽車》課件 課題四 純電動(dòng)汽車
- GB/T 15934-2024電器附件電線組件和互連電線組件
- CQI-23模塑系統(tǒng)評估審核表-中英文
- 2023年重慶市中考化學(xué)試卷(B卷)及答案解析
- 湖北省2024年中考生物試卷
- 基于機(jī)器學(xué)習(xí)的腐蝕監(jiān)測
評論
0/150
提交評論