999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Qt/Embedded視頻采集方案的設計與實現

2012-06-29 01:37:12張玉萍
電視技術 2012年23期
關鍵詞:嵌入式設備

張玉萍,鄒 澎

(鄭州大學信息工程學院,河南 鄭州 450001)

責任編輯:任健男

隨著信息技術的飛速發展,視頻采集系統廣泛應用于數碼攝像、安防監控、機器人視覺等眾多領域。Linux操作系統以其免費、開源等諸多優勢,成為嵌入式設備開發的研究熱點,同時Qt/Embedded是Trolltech開發商發布的嵌入式版本GUI開發工具,主要運行在Linux系統上,它包含完整的C++圖形界面開發工具包,并具有整套供應用程序開發的標準API函數,以其開源性、跨平臺性、界面藝術美觀性,適合高端應用性等特點,在嵌入式設備中得到廣泛的應用。因此采用基于Qt/Embedded視頻采集方案,性價比更高。

嵌入式設備視頻采集GUI設計的過程中,以往多采用QTimer定時器類實現圖像的連續性。該方案中時間的設定依賴于嵌入式平臺和攝像頭的類型,需要多次測試,過程較為繁瑣。本文調用V4L2提供的API接口函數以及在設計相同的Qt/Embedded圖像用戶界面基礎上,分別使用QThread類和QPainter類庫兩種方案,實現把USB攝像頭采集的圖像實時的顯示在GUI界面上。

1 V4L2圖像采集過程

V4L2是Linux系統中關于視頻設備的內核驅動,它為視頻設備的應用程序提供一系列接口函數[1-2]。本文Linux系統內核版本為2.6.29在內核定制過程中,已經加入了對V4L2模塊及USB攝像頭的支持,兩種方案中圖像的采集程序均調用V4L2模塊提供的主要編程接口函數獲取USB攝像頭中圖像數據,V4L2下視頻編程的流程如圖1所示。

圖1 視頻編程流程圖

下面對流程中用到的V4L2主要的API函數作簡要分析,并給出具體的參數設置。

1)打開設備操作

在Linux操作系統中任何設備都看作文件,對設備的操作就轉換成對設備文件的操作。打開視頻設備,調用函數 fd=open("/dev/video0",O_RDWR,0),其中/dev/video0就是USB攝像頭對應的設備文件,O_RDWR表明本文采用阻塞模式打開攝像頭設備。

2)視頻采集前初始化的設置

首先使用ioctl(fd,VIDIOC_QUERYCAP,&cap)獲取有關攝像頭的基本信息,查看是否支持視頻輸入或者音頻輸入輸出等。其次,在支持視頻輸入的基礎上,通過調用ioctl(fd,VIDIOC_S_FMT,&format)函數對當前驅動視頻捕獲格式進行設置。具體如下:

在上述步驟的基礎上,需要對V4L2中關鍵結構體v4l2_requestbuffers和v4l2_buffer進行設置,分別通過調用VIDIOC_REQBUFS及VIDIOC_QUERYBUF指令獲取緩存,實現內存映射。關鍵設置如下:

3)圖像采集與處理

內核采集到圖像的數據通過內存映射的方式,使得在用戶空間內可以對圖像數據進行各種處理操作。關鍵設置如下:

4)結束視頻采集

調用 ioctl(fd,VIDIOC_STREAMOFF,&format)函數停止視頻采集,之后取消內存映射,釋放內核中申請的緩存,分別通過函數 munmap(buffers[i].start,buffers[i].length)和free(buffers)實現,最后關閉視頻設備。

2 視頻采集方案設計

2.1 基于QThread類設計

該方案提出的基礎是已經編寫好獨立的視頻采集處理程序,為將其運行結果在后續開發的Qt/Emedded界面上,使用QT中的QThread線程庫,可以實現非GUI和GUI程序的通信,使得非GUI到GUI的移植過程較為簡單,以下將闡述其過程。

1)非GUI到GUI程序移植

通過調用V4L2中API接口和Linux系統函數編寫視頻采集程序,由于采用非QT類庫,視頻顯示的實現是直接對framebuffer進行一些列的操作。關鍵代碼如下:

首先打開 framebuffer,查看其參數設置,其次,將framebuffer的內存地址映射到內存空間,最后通過調用fb_pixel函數將緩存中的每一個像素繪制好framebuffer上。在此過程中需要考慮framebuffer支持圖像格式和深度,本文使用USB攝像頭采集圖片格式是MJPEG格式,framebuffer最高支持16位深度圖像,因此需要將圖片解壓并將解壓后RGB24格式轉換成RGB565格式,才能在framebuffer上清晰的顯示。

2)QThread類框體設計

在Qt/Embedded程序中,繼承QThread類的同時繼承QFrame類,類名為screen,該類具有線程和QFrame類窗體部件的雙重特性,線程中run函數是上一章節中的代碼,代碼中需要注意圖像顯示大小和screen窗體大小保持一致的同時,需要設置screen的寬度和高度必須是16的整數倍,這樣可以保證圖像正常顯示,當主窗口界面按下play按鈕時表明調用該線程時,開始執行run函數,點擊close按鈕表明結束該線程,并關閉界面。

3)QThread類庫的編譯配置

在QT程序編譯配置線程庫libqte-mt.so.3.1.0。本文使用的QT的版本為qtopia-2.2.0-FriendlyARM,此版本相對較低不支持線程庫,在編譯時會出現錯誤提示cannot find-lqt-mt,此時需要在配置編譯環境的參數中添加-thread,具體配置如下:

2.2 基于QPainter類設計

1)方案描述

由QWidget類繼承的 screen,并重新構 paintEvent(QPaintEvent*event)函數。同時,使用QPushButton類創建play和close兩個按鈕,通過Qt的信號與槽機制,與screen窗體通信分別用于視頻顯示的開啟和關閉。在圖像實時顯示的過程中,該方案沒有采用以往的QTimer類實現,而采用while循環,既保證了圖像采集的連續性,又使得程序簡化。每處理一幀圖像就會調用screen窗體部件的paintEvent函數[3-5],重新顯示 screen中的圖像,達到實時顯示的效果。

2)關鍵偽代碼解析

while中每當調用repaint(FALSE)進行更新時,程序會自動調用paintEvent函數。經調試表明如果使用update(),顯示效果會出現閃爍。使用repaint(FALSE)時自動保存screen窗體上一次的圖像信息,能很好地解決閃爍的問題。本系統申請兩幀圖像的緩沖區,每次顯示一幀圖像之后要初始化全局變量ptcur值為0,這可避免采集幀的混亂,導致圖像不正常顯示。

由上文可知圖像是以MJPEG格式存放在緩存中,所以V4L2視頻處理中,先計算經攝像頭采集的每一幀圖像大小,在然后保存到同一個文件infd中,不同幀保存的內容不同,當while循環中調用paintEvent(QPaintEvent*)函數顯示不同幀的圖像。代碼如下:

這里直接調用pix.load(QString&filename)實現,沒有使用QImage類來繪圖的原因在于以MJPEG格式采集的圖像需要先解壓縮成RGB888,然后使用QImage類創建圖像空間,最后使用drawImage(QPoint&,QImage&)繪圖,步驟較為繁瑣。而QPainter類支持壓縮格式圖像文件的繪制,使得繪圖過程較為簡單快捷。

3 嵌入式視頻采集方案的實現

不同平臺Qt/Embedded編譯環境配置的不同,但大體都需要以下4個步驟:

1)安裝交叉編譯工具。需要ARM9的Linux編譯器去編譯工程并產生ARM9處理器的目標代碼;

2)交叉編譯Qt/Embedded庫。要使Qt/Embedded程序能在嵌入式系統中運行,則應將其用到的函數庫進行交叉編譯;

3)交叉編譯Qt/Embedded程序。將交叉編譯后的可執行文件放入嵌入式文件系統中;

4)發布Qt/Embedded應用到指定開發板。

FriendlyARM開發板將前3個步驟編寫到build腳本中,只需要運行build腳本便可將Qt程序生成ARM版本的可執行文件[6-7]。上述兩種方案的發布流程相同,本文以第二種方案為例講述將視頻采集GUI發布到嵌入式FriendlyARM開發板上的簡單流程。

為了發布到QPE(Qt PDA應用環境的簡稱),需要準備兩個文件,其一是ARM版本視頻采集GUI的可執行文件videocapture和啟動器文件videocapture.desktop,啟動器需要開發板支持的圖像格式的圖標,本文采用png格式的video.png圖片,代碼如下:

使用串口分別將可執行文件videocapture和啟動器文件videocapture.desktop下載到開發板opt/Qtopia/bin/和opt/Qtopia/Applications/目錄下,同時需要把video.png下載到/opt/Qtopia/pics目錄。其程序中所需的二進制庫文件在運行build腳本時已將所需的ARM版本的庫文件拷貝到開發板中,使用chmod+x videocature命令后重啟開發板,點擊video圖標,便可看到視頻采集的圖像。視頻采集GUI發布到嵌入式設備上,如圖2所示。

圖2 嵌入式設備上的視頻采集GUI

4 小結

對比以上兩種方案,當QT4.0以上版本支持線程庫情況下,方案一更為簡單,反之當QT版本較低時編譯線程庫配置的過程較為繁瑣,方案二更具優勢。實驗結果表明,與以往視頻采集顯示方案相比,以上兩種方案不僅保證了圖像的連續性,而且避免了顯示過程中的復雜性。兩種方案簡便可行,適用于手持式或便攜移動式圖像處理設備,以及安防監控、交通路口抓拍等應用。

[1]SCHIMEK M H.Video for Linux two API specification revision 0.24[EB/OL].[2012-04-20].http://v4l2spec.bytesex.org/v4l2spec/v4l2.pdf.

[2]陳亮.基于Video4Linux2的圖像采集程序設計[J].微計算機信息,2009,25(3):65-67.

[4]BLANCHETTE G,SUMMERFIELD M.C++GUI Qt3 編程[M].齊亮,譯.北京:北京航空航天大學出版社,2006.

[5]倪繼利.Qt及Linux操作系統窗口設計[M].北京:電子工業出版社,2006.

[6]王黎明,陳雙橋,閆曉玲,等.ARM9嵌入式系統開發與實踐[M].北京:北京航空航天大學出版社,2008.

[7]任善全,呂強,錢培德,等.一個基Qt/Embedded的嵌入式Linux應用程序的實現[J].計算機應用與軟件,2006,23(2):105-107.

[8]梅寬勤.基于Qt/Embedded的圖像用戶界面移植[D].上海:復旦大學,2007.

猜你喜歡
嵌入式設備
諧響應分析在設備減振中的應用
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于VB6.0+Access2010開發的設備管理信息系統
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何在設備采購中節省成本
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 性色在线视频精品| 国产免费怡红院视频| 国产中文一区a级毛片视频| 一级黄色欧美| 六月婷婷精品视频在线观看| 免费高清毛片| 五月激情婷婷综合| 久久黄色免费电影| 一级看片免费视频| 欧美日韩国产综合视频在线观看 | 色综合激情网| 亚洲永久视频| 青草娱乐极品免费视频| 日韩精品亚洲人旧成在线| 亚洲黄网在线| 激情乱人伦| 欧美午夜在线视频| 日韩123欧美字幕| 激情网址在线观看| 4虎影视国产在线观看精品| 91麻豆精品视频| 亚洲中字无码AV电影在线观看| 99久久国产精品无码| 久久精品人妻中文系列| 国产精品无码在线看| 国产人成在线观看| 91成人精品视频| 国产手机在线小视频免费观看| 97视频免费在线观看| 狠狠做深爱婷婷综合一区| 四虎永久在线精品影院| 黄色三级网站免费| 无码国产偷倩在线播放老年人| 美女无遮挡免费视频网站| av午夜福利一片免费看| 亚洲国产高清精品线久久| 精品国产污污免费网站| 久久香蕉国产线看观看精品蕉| 欧洲精品视频在线观看| 国产69精品久久久久妇女| 91丝袜在线观看| 午夜福利无码一区二区| 91九色国产在线| 在线日韩日本国产亚洲| 免费a在线观看播放| 无码高潮喷水在线观看| 国产亚洲男人的天堂在线观看| 成年免费在线观看| 免费国产无遮挡又黄又爽| 高清亚洲欧美在线看| 亚洲成年人网| 久久久久亚洲AV成人网站软件| 国产成人综合在线视频| 国产91小视频| 亚洲一区二区成人| 久久免费视频6| 六月婷婷综合| 中国国产高清免费AV片| 成人午夜视频在线| 国产亚洲精品精品精品| 青青草一区二区免费精品| jizz国产在线| 亚洲中久无码永久在线观看软件 | 高清免费毛片| 成人午夜精品一级毛片| 久久情精品国产品免费| 国产精品亚洲一区二区三区z| 拍国产真实乱人偷精品| 亚洲国产中文精品va在线播放 | av手机版在线播放| 久久a级片| 国产a在视频线精品视频下载| 777午夜精品电影免费看| 一本大道东京热无码av| 国产精品美人久久久久久AV| 色综合中文| 茄子视频毛片免费观看| 久久精品嫩草研究院| 亚洲第一区精品日韩在线播放| 国产精品护士| 免费一级无码在线网站 | 91欧美亚洲国产五月天|