版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p> 課程名稱 嵌入式系統(tǒng) </p><p> 課 題 Qt視頻采集程序 </p><p> 專業(yè)班級(jí) 計(jì)算機(jī) </p><p> 學(xué)生姓名
2、 </p><p> 學(xué) 號(hào) </p><p> 指導(dǎo)老師 </p><p> 任務(wù)書下達(dá)日期 2012年9 月 3 日</p><p> 任務(wù)完成日期 2012年9 月8 日</
3、p><p> 嵌入式系統(tǒng)課程設(shè)計(jì)任務(wù)書</p><p> 設(shè)計(jì)課題7:Qt視頻采集程序</p><p><b> 問(wèn)題描述:</b></p><p> 智能家居系統(tǒng)中,ARM平臺(tái)可通過(guò)USB攝像頭進(jìn)行視頻數(shù)據(jù)的采集,以滿足家庭安防報(bào)警的要求。友好界面的視頻采集程序可對(duì)攝像頭信息進(jìn)行實(shí)時(shí)采集,并向用戶手機(jī)發(fā)送預(yù)警信息。
4、本課題要求在Qt程序中嵌入Opencv計(jì)算機(jī)視覺(jué)類庫(kù)。</p><p><b> 功能設(shè)計(jì)要求:</b></p><p> 1)本系統(tǒng)運(yùn)用Qt creator集成開發(fā)環(huán)境進(jìn)行友好的GUI設(shè)計(jì),并通過(guò)信號(hào)和槽接口嵌入底層opencv視頻采集程序。</p><p> 2)opencv類庫(kù)編譯:</p><p> Op
5、encv源碼包的解壓和配置</p><p> Opencv的編譯和安裝</p><p> 3)GUI界面模塊:</p><p> Qt creator設(shè)計(jì)良好的人機(jī)界面</p><p> 界面實(shí)現(xiàn)攝像頭的打開、視頻幀的抓取、保存功能</p><p><b> 3、要求:</b></
6、p><p> 1)安裝Qt creator;</p><p> 2)對(duì)Qt源碼和視頻采集程序的核心部分加必要注釋和說(shuō)明;</p><p><b> 3)程序能運(yùn)行;</b></p><p><b> 目錄</b></p><p><b> 一、系統(tǒng)介紹1&
7、lt;/b></p><p><b> 二、總體設(shè)計(jì)1</b></p><p><b> 2.1程序模塊1</b></p><p> 2.2.函數(shù)分析1</p><p> 2.3.總體結(jié)構(gòu)1</p><p> 三.主要模塊的實(shí)現(xiàn)2</p>
8、<p><b> 四.程序調(diào)試2</b></p><p><b> 五.總結(jié)與體會(huì)3</b></p><p><b> 六.源程序清單4</b></p><p><b> 系統(tǒng)介紹</b></p><p> 本系統(tǒng)運(yùn)用Qt c
9、reator集成開發(fā)環(huán)境進(jìn)行友好的GUI設(shè)計(jì),并通過(guò)信號(hào)和槽接口嵌入底層opencv視頻采集程序。通過(guò)信號(hào)(signal)和卡槽(slot)對(duì)USB攝像頭進(jìn)行識(shí)別和操作來(lái)采集視頻數(shù)據(jù)。</p><p><b> 二、總體設(shè)計(jì)</b></p><p><b> 2.1程序模塊</b></p><p> 程序只有兩個(gè)模塊
10、,就是采集界面和攝像頭操作。</p><p><b> 2.2.函數(shù)分析</b></p><p> 程序包括幾個(gè)功能函數(shù):1、攝像頭打開函數(shù)openCamera(),識(shí)別并打開攝像頭。2、攝像頭信息讀取函數(shù)readFrame(),從攝像頭中抓取幀,轉(zhuǎn)換為QImage格式,并顯示到界面上。3、攝像頭關(guān)閉函數(shù)closeCamera(),關(guān)閉攝像頭,釋放資源。4、視頻數(shù)
11、據(jù)轉(zhuǎn)換函數(shù)bgr24_bgr32(),申請(qǐng)緩沖空間,將視頻數(shù)據(jù)轉(zhuǎn)換為合適的像素大小的適用界面的格式。</p><p><b> 2.3.總體結(jié)構(gòu)</b></p><p><b> 三.主要模塊的實(shí)現(xiàn)</b></p><p> 在open按鈕上建立signal和slot來(lái)識(shí)別USB攝像頭,如果檢測(cè)到攝像頭將開啟攝像頭,
12、并讀取其信息,將視頻數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,然后將轉(zhuǎn)換成QImage格式的視頻數(shù)據(jù)顯示到label控件上,從而顯示出視頻內(nèi)容。在closeCam按鈕上建立信號(hào)關(guān)閉攝像頭并用opencv中的cvReleaseCapture函數(shù)釋放內(nèi)存。</p><p><b> 四.程序調(diào)試</b></p><p><b> 五.總結(jié)與體會(huì)</b></p>
13、;<p> 對(duì)于Qt來(lái)說(shuō)我已經(jīng)不陌生啦,經(jīng)過(guò)上半年一學(xué)期的Qt界面編程,我已經(jīng)可以獨(dú)立完成一些不大復(fù)雜的程序。對(duì)于這次課程設(shè)計(jì)其實(shí)程序十分簡(jiǎn)單,只是要嵌入opencv這個(gè)陌生的程序包,所以比較復(fù)雜。之前都是運(yùn)用自帶的程序包,在Qt中嵌入其它程序包對(duì)我來(lái)說(shuō)還是第一次,新手上路就會(huì)遇到問(wèn)題,我在網(wǎng)上查了安裝方法,但是有部分是錯(cuò)誤的,導(dǎo)致后面編譯能通過(guò),卻運(yùn)行不了。經(jīng)過(guò)一步步的排查才發(fā)現(xiàn)是安裝錯(cuò)啦,重新安裝后才解決了問(wèn)題。還有
14、一個(gè)問(wèn)題,就是視頻轉(zhuǎn)換這部分,參考了資料才知道要將視頻數(shù)據(jù)轉(zhuǎn)換成QImage格式才可以顯示在界面上,不然系統(tǒng)就會(huì)報(bào)錯(cuò)。</p><p><b> 六.源程序清單</b></p><p> 頭文件cameraget.h</p><p> #ifndef CAMERAGET_H</p><p> #define CA
15、MERAGET_H</p><p> #include <QWidget></p><p> #include <QImage></p><p> #include <QTimer> // 設(shè)置采集數(shù)據(jù)的間隔時(shí)間</p><p> #include<QMessageBox><
16、;/p><p> #include <highgui.h> //包含opencv庫(kù)頭文件</p><p> #include <cv.h></p><p> namespace Ui {</p><p> class cameraGet;</p><p><b> }</
17、b></p><p> class cameraGet : public QWidget</p><p><b> {</b></p><p><b> Q_OBJECT</b></p><p><b> public:</b></p><p&
18、gt; explicit cameraGet(QWidget *parent = 0);</p><p> ~cameraGet();</p><p> char *bgr24_bgr32(int width,int height, char *src);</p><p> private slots:</p><p> void
19、openCamera(); // 打開攝像頭</p><p> void readFrame(); // 讀取當(dāng)前幀信息</p><p> void closeCamera(); // 關(guān)閉攝像頭。</p><p><b> private:</b></p><p> Ui::cam
20、eraGet *ui;</p><p> bool initCamera;</p><p> QTimer *timer;</p><p> CvCapture *cam;// 視頻獲取結(jié)構(gòu), 用來(lái)作為視頻獲取函數(shù)的一個(gè)參數(shù)</p><p> IplImage *frame;//申請(qǐng)IplImage類型指針,就是申請(qǐng)內(nèi)存空間
21、來(lái)存放每一幀圖像</p><p><b> };</b></p><p> #endif // CAMERAGET_H</p><p> source文件cameraget.cpp</p><p> #include "cameraget.h"</p><p> #i
22、nclude "ui_cameraget.h"</p><p> cameraGet::cameraGet(QWidget *parent) :</p><p> QWidget(parent),</p><p> ui(new Ui::cameraGet)</p><p><b> {</b>
23、;</p><p> ui->setupUi(this);</p><p> cam = NULL;</p><p> timer = new QTimer(this); // 初始化</p><p> initCamera=FALSE;</p><p><b> /
24、*信號(hào)和槽*/</b></p><p> connect(timer, SIGNAL(timeout()), this, SLOT(readFrame())); // 時(shí)間到,讀取當(dāng)前攝像頭信息</p><p> connect(ui->open, SIGNAL(clicked()), this, SLOT(openCamera()));</p>&l
25、t;p> connect(ui->closeCam, SIGNAL(clicked()), this, SLOT(closeCamera()));</p><p> connect(ui->btnExit, SIGNAL(clicked()), this, SLOT(close()));</p><p><b> }</b></p>
26、<p> /* 打開攝像頭 */</p><p> void cameraGet::openCamera()</p><p><b> {</b></p><p> if(!initCamera)</p><p><b> {</b></p><p>
27、 QMessageBox::about(this,"提示","即將打開攝像頭");</p><p> cam =cvCreateCameraCapture(-1);//打開攝像頭,從攝像頭中獲取視頻</p><p> if(cam==NULL)</p><p> QMessageBox::information(thi
28、s,"警告","未連接攝像頭!");</p><p><b> else</b></p><p> initCamera=TRUE;</p><p><b> }</b></p><p> if(initCamera)</p><p
29、><b> {</b></p><p> QMessageBox::about(this,"提示","攝像頭已經(jīng)打開");</p><p> timer->start(25); // 開始計(jì)時(shí),超時(shí)則發(fā)出timeout()信號(hào)</p><p><b>
30、 }</b></p><p><b> }</b></p><p> /* 讀取攝像頭信息 */</p><p> void cameraGet::readFrame()</p><p><b> {</b></p><p> char * image
31、;</p><p> char * image32=0;</p><p><b> int size;</b></p><p> frame = cvQueryFrame(cam);// 從攝像頭中抓取并返回每一幀</p><p> image=frame->imageData;</p>&l
32、t;p> size=(frame->width)*(frame->height)*3; //獲取幀視頻像素大小</p><p><b> if(image)</b></p><p><b> {</b></p><p> image32=bgr24_bgr32(frame->width,fr
33、ame->height,frame->imageData);</p><p> // 將抓取到的幀,轉(zhuǎn)換為QImage格式。</p><p> QImage image((const uchar*)image32, frame->width, frame->height, QImage::Format_RGB32);</p><p>
34、ui->label->setPixmap(QPixmap::fromImage(image)); // 將圖片顯示到label上</p><p><b> }</b></p><p><b> }</b></p><p> /*關(guān)閉攝像頭,釋放資源,必須釋放*/</p><p>
35、 void cameraGet::closeCamera()</p><p><b> {</b></p><p> timer->stop(); // 停止讀取數(shù)據(jù)。</p><p> cvReleaseCapture(&cam);//釋放內(nèi)存;</p><p> QMessag
36、eBox msgBox;</p><p> msgBox.setWindowTitle(tr("!提示"));</p><p> msgBox.setText(tr("攝像頭成功關(guān)閉!"));</p><p> msgBox.exec();</p><p><b> }</b&g
37、t;</p><p> char *cameraGet::bgr24_bgr32(int width,int height, char *src)</p><p><b> {</b></p><p> char *dst=0, *tmp;</p><p> dst=(char *)malloc(width*he
38、ight*4); //申請(qǐng)緩沖區(qū)空間</p><p><b> tmp=dst;</b></p><p> for(int y=0; y<height;y++) //將視頻數(shù)據(jù)轉(zhuǎn)換為:width*height*3 的數(shù)據(jù)格式</p><p><b> {</b></p><p> fo
39、r(int x=0; x<width; x++)</p><p><b> {</b></p><p> for(int i=0;i<3;i++)</p><p><b> {</b></p><p> *dst++=*src++;</p><p><
40、;b> }</b></p><p><b> *dst++=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> return(tmp);</p><p><b>
41、; }</b></p><p> cameraGet::~cameraGet()</p><p><b> {</b></p><p> delete ui;</p><p><b> }</b></p><p> 主函數(shù)main.cpp</p&
42、gt;<p> #include <QtGui/QApplication></p><p> #include<QTextCodec></p><p> #include "cameraget.h"</p><p> int main(int argc, char *argv[])</p>
43、<p><b> {</b></p><p> QApplication a(argc, argv);</p><p> //設(shè)置字符編碼為系統(tǒng)字符編碼</p><p> QTextCodec *codec = QTextCodec::codecForName("System"); //獲取系統(tǒng)編碼
44、</p><p> QTextCodec::setCodecForLocale(codec);</p><p> QTextCodec::setCodecForCStrings(codec);</p><p> QTextCodec::setCodecForTr(codec);</p><p> cameraGet w;</p&
45、gt;<p><b> w.show();</b></p><p> return a.exec();</p><p><b> }</b></p><p> 計(jì)算機(jī)與通信學(xué)院課程設(shè)計(jì)評(píng)分表</p><p> 課程名稱: 嵌入式系統(tǒng)課程設(shè)計(jì) <
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設(shè)計(jì)--基于qt的界面程序設(shè)計(jì)
- 基于qt的界面程序設(shè)計(jì)-嵌入式課程設(shè)計(jì)
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告--模擬電壓采集電路及程序設(shè)計(jì)
- 簡(jiǎn)單畫圖程序課程設(shè)計(jì)報(bào)告
- 算術(shù)測(cè)試程序課程設(shè)計(jì)報(bào)告
- 面向?qū)ο蟪绦蛘n程設(shè)計(jì)報(bào)告
- 簡(jiǎn)單畫圖程序課程設(shè)計(jì)報(bào)告
- 基于qt的音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- 溫度采集與控制課程設(shè)計(jì)報(bào)告
- 《java程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- web程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--雙機(jī)參數(shù)采集系統(tǒng)設(shè)計(jì)
- linux程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- c課程設(shè)計(jì)報(bào)告-- windows程序設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)報(bào)告---打字程序設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)報(bào)告---打字程序設(shè)計(jì)報(bào)告
- 模擬時(shí)鐘轉(zhuǎn)動(dòng)程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論