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
主站蜘蛛池模板: 久久黄色影院| 日韩免费成人| 黄色片中文字幕| 欧美激情伊人| 亚洲二三区| 自偷自拍三级全三级视频 | 国产成人精品日本亚洲| 日本不卡在线| 最近最新中文字幕在线第一页| 免费xxxxx在线观看网站| 国产在线观看一区精品| 久久久国产精品免费视频| 成人国产精品2021| 超碰aⅴ人人做人人爽欧美| 在线免费a视频| 国产网站免费看| 免费jizz在线播放| 日本亚洲国产一区二区三区| 国产午夜福利片在线观看| 成人免费网站在线观看| 欧美午夜一区| 国产91色| 亚洲天堂视频网| 国产亚洲精品97在线观看| 免费在线视频a| 91麻豆国产视频| 国产裸舞福利在线视频合集| 性色在线视频精品| 77777亚洲午夜久久多人| 亚洲一区色| 玖玖精品视频在线观看| 欧美精品v欧洲精品| 日本人又色又爽的视频| 国产簧片免费在线播放| 最新无码专区超级碰碰碰| 真人高潮娇喘嗯啊在线观看| 高清无码手机在线观看| 在线观看热码亚洲av每日更新| 台湾AV国片精品女同性| 欧美精品xx| 天天综合天天综合| 国产精品久久久久鬼色| 尤物国产在线| 亚洲综合极品香蕉久久网| 无码精品一区二区久久久| 久久综合丝袜日本网| 国产成人精品高清不卡在线| 91精品国产91久久久久久三级| 亚洲色图另类| 亚洲天堂2014| 一边摸一边做爽的视频17国产| 精品久久香蕉国产线看观看gif| 亚洲男人的天堂视频| 日本欧美中文字幕精品亚洲| 久青草国产高清在线视频| 日韩精品免费在线视频| 日本亚洲国产一区二区三区| 精品三级网站| 欧美全免费aaaaaa特黄在线| 国产人人射| 免费人成在线观看视频色| 99热这里只有精品2| 国产欧美视频综合二区| 免费无码又爽又黄又刺激网站| 亚洲av片在线免费观看| 欧美a在线| 男女猛烈无遮挡午夜视频| 国精品91人妻无码一区二区三区| 午夜在线不卡| 伊人久久大香线蕉成人综合网| 国产精选小视频在线观看| 露脸真实国语乱在线观看| 91九色国产在线| 国产一区二区三区夜色| 色婷婷成人| 毛片在线看网站| 国产精品 欧美激情 在线播放| 欧美福利在线观看| 午夜限制老子影院888| 国产视频资源在线观看| 国产视频 第一页| 国产网站在线看|