国产91免费_国产精品电影一区_日本s色大片在线观看_中文在线免费看视频

您現在的位置: 通信界 >> 視頻通信 >> 技術正文  
 
基于ARM的嵌入式USB圖像采集與顯示[圖]
[ 通信界 / 佚名 / m.6611o.com / 2012/7/5 21:24:57 ]
 

引言

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

1 系統架構

系統通過當前市場上應用最廣泛的中芯微公司生產的zc301p 芯片的USB 攝像頭進行圖像采集,然后將圖像信息傳送到ARM 芯片中進行處理,最終通過基于Qt/Embedded 編寫的圖形顯示程序在LCD 上實時顯示。系統的整體架構如圖1 所示。

2 視頻圖像采集

系統采用中芯微公司生產的zc301p 芯片的USB 攝像頭作為圖像采集設備,并介紹了基于Video4Linux 編程協議進行視頻圖像采集的一般過程。

2.1 USB 攝像頭驅動

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

在配置菜單選項中,設備驅動是最重要的配置項。選擇的配置項如下:

Device Drivers - - - >

Multimedia devices - - - >

Video For Linux

Enable Video For Linux API 1(DEPRECAteD)

Video capture adapters - - - >

V4L USB devices - - - >

USB Video Class (UVC)

UVC input events device support

GSPCA based webcams - - - >

ZC3XXX USB CAMEra Driver

USB ZC0301 [P]Image Processor and Control

Chip support

現在,內核被配置成可以支持Video4Linux 的視頻接口,并且加入了支持zc301pUSB 攝像頭的驅動程序。

2.2 基于Video4Linux 的視頻圖像采集程序設計

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

(1)打開視頻設備。

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

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

int my_v4l_open(char*dev,my_v4l_struct*vd){

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

printf("ERROR opening V4L interface");

exit(1);}

(2)讀設備信息

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

int my_v4l_get_capability(my_v4l_struct*){

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

printf("error:v4l_get_capability ");

exit(1);}

return 0;}

(3)視頻圖像采集。

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

void my_v4l_mmap_init(my_v4l_struct*vd){

……

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

vd- >pframebuffer= (unsigned char*)mmap (0,

vd- >videombuf.size,

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

/* 把文件fd 與video_mbuf 綁定,實現映射*/

vd- >mmapsize=vd- >videombuf.size;

vd- >vmmap.height=vd- >hdrheight;

vd- >vmmap.width=vd- >hdrwidth;

vd- >vmmap.format=vd- >formaTIn;

vd- >vmmap.frame=0;

……}

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

采集工作結束后調用munmap 取消文件fd 與video_mbuf 的綁定。

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

(4)關閉設備在視頻采集完成后,必需關閉視頻設備。

close(vd- >fd);

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

基于嵌入式Linux 常見的GUI 系統有MiniGUI、MicroWindows、OpenGUI和基于Framebuffer[5]的Qt/Embedded[4].Qt 是諾基亞開發的一個跨平臺的C++ 圖形用戶界面應用程序框架,它提供給應用程序開發者建立藝術級的圖形用戶界面所需的功能,并且是完全面向對象的,很容易擴展,允許真正的組件編程。正是基于以上優點,本文采用Qt/Embedded 開發平臺,并將基于Qt 的圖形界面Qtopia 移入我們的文件系統中。

為了避免由于圖像數據量大而在目標板上顯示閃爍的問題,本文采用雙緩沖技術實現采集圖像顯示,采用的是QPixmap 對象。QPixmap 是Qt 為圖像處理提供的類,主要用于圖像的繪制。實現雙緩沖時,先把要顯示的內容繪制在這個QPixmap pixmap 對象上,然后再用一步操作把pixmap 繪制在屏幕上。基于Qt 圖像顯示及輔助框線繪制的部分代碼段如下:

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

QPainter p(&pix);// 定義繪制工具

QPainterQPen pen (yellow,3,DotLine);// 定義一個畫筆的屬性,如顏色、粗細、線條樣式

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

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

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

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

p.lineTo(490,50);

…略

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

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

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

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

4 結論

本文基于ARM9 處理器和嵌入式Linux 操作系統,詳細介紹了一種USB 攝像頭圖像采集與顯示的通用方法。Linux 代碼完全開源,系統具有良好的移植性,可方便地進行各種擴展,采用Qt 進行人機界面的設計能夠極大地節省開發成本和周期。本方案經推廣可用于工業控制、智能交通、小區監控等領域。

 

作者:佚名 合作媒體:不詳 編輯:顧北

 

 

 
 熱點技術
普通技術 “5G”,真的來了!牛在哪里?
普通技術 5G,是偽命題嗎?
普通技術 云視頻會議關鍵技術淺析
普通技術 運營商語音能力開放集中管理方案分析
普通技術 5G網絡商用需要“無憂”心
普通技術 面向5G應運而生的邊緣計算
普通技術 簡析5G時代四大關鍵趨勢
普通技術 國家網信辦就《數據安全管理辦法》公開征求意見
普通技術 《車聯網(智能網聯汽車)直連通信使用5905-5925MHz頻段管理規定(
普通技術 中興通訊混合云解決方案,滿足5G多元業務需求
普通技術 大規模MIMO將帶來更多無線信道,但也使無線信道易受攻擊
普通技術 蜂窩車聯網的標準及關鍵技術及網絡架構的研究
普通技術 4G與5G融合組網及互操作技術研究
普通技術 5G中CU-DU架構、設備實現及應用探討
普通技術 無源光網絡承載5G前傳信號可行性的研究概述
普通技術 面向5G中傳和回傳網絡承載解決方案
普通技術 數據中心布線系統可靠性探討
普通技術 家庭互聯網終端價值研究
普通技術 鎏信科技CEO劉舟:從連接層構建IoT云生態,聚焦CMP是關鍵
普通技術 SCEF引入需求分析及部署應用
  版權與免責聲明: ① 凡本網注明“合作媒體:通信界”的所有作品,版權均屬于通信界,未經本網授權不得轉載、摘編或利用其它方式使用。已經本網授權使用作品的,應在授權范圍內使用,并注明“來源:通信界”。違反上述聲明者,本網將追究其相關法律責任。 ② 凡本網注明“合作媒體:XXX(非通信界)”的作品,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。 ③ 如因作品內容、版權和其它問題需要同本網聯系的,請在一月內進行。
通信視界
華為余承東:Mate30總體銷量將會超過兩千萬部
趙隨意:媒體融合需積極求變
普通對話 苗圩:建設新一代信息基礎設施 加快制造業數字
普通對話 華為余承東:Mate30總體銷量將會超過兩千萬部
普通對話 趙隨意:媒體融合需積極求變
普通對話 韋樂平:5G給光纖、光模塊、WDM光器件帶來新機
普通對話 安筱鵬:工業互聯網——通向知識分工2.0之路
普通對話 庫克:蘋果不是壟斷者
普通對話 華為何剛:挑戰越大,成就越大
普通對話 華為董事長梁華:盡管遇到外部壓力,5G在商業
普通對話 網易董事局主席丁磊:中國正在引領全球消費趨
普通對話 李彥宏:無人乘用車時代即將到來 智能交通前景
普通對話 中國聯通研究院院長張云勇:雙輪驅動下,工業
普通對話 “段子手”楊元慶:人工智能金句頻出,他能否
普通對話 高通任命克里斯蒂安諾·阿蒙為公司總裁
普通對話 保利威視謝曉昉:深耕視頻技術 助力在線教育
普通對話 九州云副總裁李開:幫助客戶構建自己的云平臺
通信前瞻
楊元慶:中國制造高質量發展的未來是智能制造
對話亞信科技CTO歐陽曄博士:甘為橋梁,攜"電
普通對話 楊元慶:中國制造高質量發展的未來是智能制造
普通對話 對話亞信科技CTO歐陽曄博士:甘為橋梁,攜"電
普通對話 對話倪光南:“中國芯”突圍要發揮綜合優勢
普通對話 黃宇紅:5G給運營商帶來新價值
普通對話 雷軍:小米所有OLED屏幕手機均已支持息屏顯示
普通對話 馬云:我挑戰失敗心服口服,他們才是雙11背后
普通對話 2018年大數據產業發展試點示范項目名單出爐 2
普通對話 陳志剛:提速又降費,中國移動的兩面精彩
普通對話 專訪華為終端何剛:第三代nova已成為爭奪全球
普通對話 中國普天陶雄強:物聯網等新經濟是最大機遇
普通對話 人人車李健:今年發力金融 拓展汽車后市場
普通對話 華為萬飚:三代出貴族,PC產品已走在正確道路
普通對話 共享退潮單車入冬 智享單車卻走向盈利
普通對話 Achronix發布新品單元塊 推動eFPGA升級
普通對話 金柚網COO邱燕:天吳系統2.0真正形成了社保管