

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課 程 設 計 任 務 書</p><p> 課程名稱 嵌入式系統(tǒng) </p><p> 課 題 Qt視頻采集程序 </p><p> 專業(yè)班級 計算機 </p><p> 學生姓名
2、 </p><p> 學 號 </p><p> 指導老師 </p><p> 任務書下達日期 2012年9 月 3 日</p><p> 任務完成日期 2012年9 月8 日</
3、p><p> 嵌入式系統(tǒng)課程設計任務書</p><p> 設計課題7:Qt視頻采集程序</p><p><b> 問題描述:</b></p><p> 智能家居系統(tǒng)中,ARM平臺可通過USB攝像頭進行視頻數據的采集,以滿足家庭安防報警的要求。友好界面的視頻采集程序可對攝像頭信息進行實時采集,并向用戶手機發(fā)送預警信息。
4、本課題要求在Qt程序中嵌入Opencv計算機視覺類庫。</p><p><b> 功能設計要求:</b></p><p> 1)本系統(tǒng)運用Qt creator集成開發(fā)環(huán)境進行友好的GUI設計,并通過信號和槽接口嵌入底層opencv視頻采集程序。</p><p> 2)opencv類庫編譯:</p><p> Op
5、encv源碼包的解壓和配置</p><p> Opencv的編譯和安裝</p><p> 3)GUI界面模塊:</p><p> Qt creator設計良好的人機界面</p><p> 界面實現攝像頭的打開、視頻幀的抓取、保存功能</p><p><b> 3、要求:</b></
6、p><p> 1)安裝Qt creator;</p><p> 2)對Qt源碼和視頻采集程序的核心部分加必要注釋和說明;</p><p><b> 3)程序能運行;</b></p><p><b> 目錄</b></p><p><b> 一、系統(tǒng)介紹1&
7、lt;/b></p><p><b> 二、總體設計1</b></p><p><b> 2.1程序模塊1</b></p><p> 2.2.函數分析1</p><p> 2.3.總體結構1</p><p> 三.主要模塊的實現2</p>
8、<p><b> 四.程序調試2</b></p><p><b> 五.總結與體會3</b></p><p><b> 六.源程序清單4</b></p><p><b> 系統(tǒng)介紹</b></p><p> 本系統(tǒng)運用Qt c
9、reator集成開發(fā)環(huán)境進行友好的GUI設計,并通過信號和槽接口嵌入底層opencv視頻采集程序。通過信號(signal)和卡槽(slot)對USB攝像頭進行識別和操作來采集視頻數據。</p><p><b> 二、總體設計</b></p><p><b> 2.1程序模塊</b></p><p> 程序只有兩個模塊
10、,就是采集界面和攝像頭操作。</p><p><b> 2.2.函數分析</b></p><p> 程序包括幾個功能函數:1、攝像頭打開函數openCamera(),識別并打開攝像頭。2、攝像頭信息讀取函數readFrame(),從攝像頭中抓取幀,轉換為QImage格式,并顯示到界面上。3、攝像頭關閉函數closeCamera(),關閉攝像頭,釋放資源。4、視頻數
11、據轉換函數bgr24_bgr32(),申請緩沖空間,將視頻數據轉換為合適的像素大小的適用界面的格式。</p><p><b> 2.3.總體結構</b></p><p><b> 三.主要模塊的實現</b></p><p> 在open按鈕上建立signal和slot來識別USB攝像頭,如果檢測到攝像頭將開啟攝像頭,
12、并讀取其信息,將視頻數據進行格式轉換,然后將轉換成QImage格式的視頻數據顯示到label控件上,從而顯示出視頻內容。在closeCam按鈕上建立信號關閉攝像頭并用opencv中的cvReleaseCapture函數釋放內存。</p><p><b> 四.程序調試</b></p><p><b> 五.總結與體會</b></p>
13、;<p> 對于Qt來說我已經不陌生啦,經過上半年一學期的Qt界面編程,我已經可以獨立完成一些不大復雜的程序。對于這次課程設計其實程序十分簡單,只是要嵌入opencv這個陌生的程序包,所以比較復雜。之前都是運用自帶的程序包,在Qt中嵌入其它程序包對我來說還是第一次,新手上路就會遇到問題,我在網上查了安裝方法,但是有部分是錯誤的,導致后面編譯能通過,卻運行不了。經過一步步的排查才發(fā)現是安裝錯啦,重新安裝后才解決了問題。還有
14、一個問題,就是視頻轉換這部分,參考了資料才知道要將視頻數據轉換成QImage格式才可以顯示在界面上,不然系統(tǒng)就會報錯。</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> // 設置采集數據的間隔時間</p><p> #include<QMessageBox><
16、;/p><p> #include <highgui.h> //包含opencv庫頭文件</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(); // 讀取當前幀信息</p><p> void closeCamera(); // 關閉攝像頭。</p><p><b> private:</b></p><p> Ui::cam
20、eraGet *ui;</p><p> bool initCamera;</p><p> QTimer *timer;</p><p> CvCapture *cam;// 視頻獲取結構, 用來作為視頻獲取函數的一個參數</p><p> IplImage *frame;//申請IplImage類型指針,就是申請內存空間
21、來存放每一幀圖像</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、*信號和槽*/</b></p><p> connect(timer, SIGNAL(timeout()), this, SLOT(readFrame())); // 時間到,讀取當前攝像頭信息</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,"提示","攝像頭已經打開");</p><p> timer->start(25); // 開始計時,超時則發(fā)出timeout()信號</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> // 將抓取到的幀,轉換為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> /*關閉攝像頭,釋放資源,必須釋放*/</p><p>
35、 void cameraGet::closeCamera()</p><p><b> {</b></p><p> timer->stop(); // 停止讀取數據。</p><p> cvReleaseCapture(&cam);//釋放內存;</p><p> QMessag
36、eBox msgBox;</p><p> msgBox.setWindowTitle(tr("!提示"));</p><p> msgBox.setText(tr("攝像頭成功關閉!"));</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ū)空間</p><p><b> tmp=dst;</b></p><p> for(int y=0; y<height;y++) //將視頻數據轉換為:width*height*3 的數據格式</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> 主函數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> //設置字符編碼為系統(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> 計算機與通信學院課程設計評分表</p><p> 課程名稱: 嵌入式系統(tǒng)課程設計 <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式課程設計--基于qt的界面程序設計
- 基于qt的界面程序設計-嵌入式課程設計
- 程序設計課程設計報告
- 程序設計課程設計報告
- 匯編語言課程設計報告--模擬電壓采集電路及程序設計
- 簡單畫圖程序課程設計報告
- 算術測試程序課程設計報告
- 面向對象程序課程設計報告
- 簡單畫圖程序課程設計報告
- 基于qt的音樂播放器課程設計報告
- 溫度采集與控制課程設計報告
- 《java程序設計》課程設計報告
- web程序設計課程設計報告
- 課程設計報告--雙機參數采集系統(tǒng)設計
- linux程序設計課程設計報告
- c課程設計報告-- windows程序設計報告
- vb課程設計報告---打字程序設計報告
- vb課程設計報告---打字程序設計報告
- 模擬時鐘轉動程序課程設計報告
- 磁盤調度算法程序課程設計報告
評論
0/150
提交評論