《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM的嵌入式USB圖像采集與顯示
基于ARM的嵌入式USB圖像采集與顯示
摘要: 基于ARM9處理器和嵌入式Linux操作系統,文章研究了視頻圖像采集與顯示的一般方法。以USB攝像頭采集圖像為例,介紹了Linux系統下基于Video4Linux進行視頻圖像采集的一般過程。
關鍵詞: ARM USB 圖像采集
Abstract:
Key words :

  摘要:基于ARM9 處理器和嵌入式Linux 操作系統,文章研究了視頻圖像采集與顯示的一般方法。以USB 攝像頭采集圖像為例,介紹了Linux 系統下基于Video4Linux 進行視頻圖像采集的一般過程,并且最終通過Qt/Embedded 編寫的圖形界面將采集到的視頻圖像在LCD 上實時地顯示出來。

  引言

  目前市場上大部分的圖像采集與處理系統是基于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\n”);

  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 進行人機界面的設計能夠極大地節省開發成本和周期。本方案經推廣可用于工業控制、智能交通、小區監控等領域。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99精品视频免费观看| 久久久激情视频| 欧美专区中文字幕| 亚洲欧美日韩精品在线| 一区二区三区三区在线| 亚洲精品影视| 亚洲精品视频免费观看| 亚洲激情另类| 亚洲国产日韩欧美一区二区三区| 精品动漫3d一区二区三区| 黄色成人在线免费| 国产综合色在线| 国内自拍一区| 国产一区二区三区四区五区美女| 国产欧美日本| 国产视频在线观看一区| 国产午夜精品全部视频播放| 国产一区二区在线观看免费播放 | 欧美成人精品1314www| 久久婷婷人人澡人人喊人人爽 | 国产精品久久国产三级国电话系列| 欧美日韩国产a| 欧美午夜视频一区二区| 国产精品久久久久91| 国产伦精品一区二区三区免费| 国产精品毛片a∨一区二区三区| 国产精品日韩在线一区| 国产欧美日韩三级| 韩国一区二区三区美女美女秀| 一区在线视频观看| 最新中文字幕亚洲| 一区二区国产日产| 亚洲欧美久久久| 亚洲高清不卡一区| 99视频精品免费观看| 亚洲在线视频| 久久精品国产精品亚洲| 麻豆精品在线视频| 欧美日本一道本| 国产精品女主播| 国模一区二区三区| 亚洲黄色一区二区三区| 一区二区三区高清| 欧美一级黄色录像| 亚洲免费福利视频| 性色av一区二区三区| 久久久久久免费| 欧美美女喷水视频| 国产精品永久免费| 亚洲福利视频专区| 亚洲一区二区在线视频 | 中文日韩电影网站| 欧美亚洲免费高清在线观看| 久久免费国产精品| 欧美了一区在线观看| 国产精品永久免费在线| 亚洲第一搞黄网站| 亚洲视频免费| 亚洲国产日韩欧美一区二区三区| 亚洲婷婷在线| 久久夜精品va视频免费观看| 欧美三级欧美一级| 在线国产精品播放| 亚洲一级黄色av| 亚洲精品少妇网址| 久久riav二区三区| 欧美精品一区在线| 国产欧美日韩专区发布| 亚洲人成在线播放| 久久成人18免费观看| 亚洲午夜激情免费视频| 玖玖在线精品| 国产精品色午夜在线观看| 亚洲激情不卡| 久久福利一区| 欧美一区二区免费| 欧美日韩色一区| 有码中文亚洲精品| 亚洲综合色噜噜狠狠| 一二美女精品欧洲| 免播放器亚洲一区| 国产一区二区三区不卡在线观看| 99精品国产在热久久下载| 亚洲电影免费观看高清| 香蕉av777xxx色综合一区| 欧美日韩aaaaa| 在线成人激情视频| 午夜在线电影亚洲一区| 亚洲视频国产视频| 欧美黄色小视频| 伊人春色精品| 欧美一区成人| 午夜精品国产精品大乳美女| 欧美日韩成人网| 亚洲福利国产精品| 久久黄金**| 欧美在线关看| 国产精品日产欧美久久久久| 一本色道久久精品| 9人人澡人人爽人人精品| 欧美.com| 伊人成人在线视频| 亚洲成色999久久网站| 久久精品国产一区二区三区免费看| 国产精品扒开腿做爽爽爽视频| 亚洲精品乱码久久久久久按摩观 | 久久不射网站| 国产精品一区二区男女羞羞无遮挡 | 影音先锋久久| 亚洲国产精品va在线看黑人 | 悠悠资源网亚洲青| 亚洲电影有码| 久久亚洲精品网站| 激情久久中文字幕| 久久精品毛片| 毛片精品免费在线观看| 在线成人国产| 亚洲精品乱码久久久久久久久| 美女成人午夜| 亚洲国产日韩在线| 日韩视频三区| 欧美三级中文字幕在线观看| 99视频在线观看一区三区| 一区二区三区四区蜜桃| 欧美性做爰猛烈叫床潮| 亚洲一区二区三区在线| 欧美一级专区| 狠狠色综合一区二区| 亚洲第一精品夜夜躁人人爽| 美国三级日本三级久久99| 亚洲国产99| 亚洲视频axxx| 国产美女搞久久| 久久国产一区| 欧美二区在线看| 亚洲精品在线免费| 亚洲综合色在线| 国产视频一区三区| 91久久午夜| 欧美日韩一级片在线观看| 亚洲一区二区在线看| 久久成人免费网| 在线观看福利一区| 99在线精品观看| 国产精品久久久亚洲一区| 性色一区二区三区| 老司机67194精品线观看| 亚洲人永久免费| 亚洲欧美在线免费| 精品白丝av| 亚洲性夜色噜噜噜7777| 国产欧美日韩不卡| 亚洲日本aⅴ片在线观看香蕉| 欧美三日本三级少妇三2023| 亚洲欧美在线观看| 牛牛国产精品| 在线视频日韩| 久久噜噜亚洲综合| 亚洲狼人精品一区二区三区| 午夜亚洲福利| 在线观看成人av| 亚洲专区免费| 伊人色综合久久天天| 亚洲一级二级在线| 国内免费精品永久在线视频| 夜夜嗨av色一区二区不卡| 国产精品一区免费视频| 亚洲欧洲在线免费| 国产精品资源在线观看| 亚洲精品午夜精品| 国产乱子伦一区二区三区国色天香| 亚洲国产高清在线观看视频| 国产精品v日韩精品| 亚洲国产高清高潮精品美女| 欧美视频第二页| 亚洲黄网站在线观看| 国产精品久久二区| 亚洲精品在线一区二区| 国产三级欧美三级日产三级99| 日韩一级黄色大片| 国产一区二区激情| 亚洲桃花岛网站| 亚洲国产成人在线视频| 久久精品国产99国产精品澳门| 一本色道久久综合亚洲精品小说| 久久综合久久久久88| 亚洲综合欧美日韩| 欧美日韩视频不卡| 91久久精品国产91久久| 国产日韩精品久久| 亚洲婷婷在线| 亚洲激情小视频| 久久久久久久久久久久久久一区| 9l视频自拍蝌蚪9l视频成人| 美女图片一区二区| 欧美在线啊v| 国产精品视频999| 亚洲午夜精品网| 亚洲区一区二区三区| 久久视频免费观看|