Qt视频采集程序课程设计报告.docx

上传人:b****6 文档编号:3639890 上传时间:2022-11-24 格式:DOCX 页数:10 大小:518.01KB
下载 相关 举报
Qt视频采集程序课程设计报告.docx_第1页
第1页 / 共10页
Qt视频采集程序课程设计报告.docx_第2页
第2页 / 共10页
Qt视频采集程序课程设计报告.docx_第3页
第3页 / 共10页
Qt视频采集程序课程设计报告.docx_第4页
第4页 / 共10页
Qt视频采集程序课程设计报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Qt视频采集程序课程设计报告.docx

《Qt视频采集程序课程设计报告.docx》由会员分享,可在线阅读,更多相关《Qt视频采集程序课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。

Qt视频采集程序课程设计报告.docx

Qt视频采集程序课程设计报告

课程设计任务书

 

课程名称嵌入式系统

课题Qt视频采集程序

 

专业班级计算机

学生姓名

学号

指导老师

 

任务书下达日期2012年9月3日

任务完成日期2012年9月8日

嵌入式系统课程设计任务书

设计课题7:

Qt视频采集程序

1、问题描述:

智能家居系统中,ARM平台可通过USB摄像头进行视频数据的采集,以满足家庭安防报警的要求。

友好界面的视频采集程序可对摄像头信息进行实时采集,并向用户手机发送预警信息。

本课题要求在Qt程序中嵌入Opencv计算机视觉类库。

2、功能设计要求:

1)本系统运用Qtcreator集成开发环境进行友好的GUI设计,并通过信号和槽接口嵌入底层opencv视频采集程序。

2)opencv类库编译:

ØOpencv源码包的解压和配置

ØOpencv的编译和安装

3)GUI界面模块:

ØQtcreator设计良好的人机界面

Ø界面实现摄像头的打开、视频帧的抓取、保存功能

 

3、要求:

1)安装Qtcreator;

2)对Qt源码和视频采集程序的核心部分加必要注释和说明;

3)程序能运行;

 

目录

一、系统介绍1

二、总体设计1

2.1程序模块1

2.2.函数分析1

2.3.总体结构1

三.主要模块的实现2

四.程序调试2

五.总结与体会3

六.源程序清单4

 

一、系统介绍

本系统运用Qtcreator集成开发环境进行友好的GUI设计,并通过信号和槽接口嵌入底层opencv视频采集程序。

通过信号(signal)和卡槽(slot)对USB摄像头进行识别和操作来采集视频数据。

二、总体设计

2.1程序模块

程序只有两个模块,就是采集界面和摄像头操作。

2.2.函数分析

程序包括几个功能函数:

1、摄像头打开函数openCamera(),识别并打开摄像头。

2、摄像头信息读取函数readFrame(),从摄像头中抓取帧,转换为QImage格式,并显示到界面上。

3、摄像头关闭函数closeCamera(),关闭摄像头,释放资源。

4、视频数据转换函数bgr24_bgr32(),申请缓冲空间,将视频数据转换为合适的像素大小的适用界面的格式。

2.3.总体结构

三.主要模块的实现

在open按钮上建立signal和slot来识别USB摄像头,如果检测到摄像头将开启摄像头,并读取其信息,将视频数据进行格式转换,然后将转换成QImage格式的视频数据显示到label控件上,从而显示出视频内容。

在closeCam按钮上建立信号关闭摄像头并用opencv中的cvReleaseCapture函数释放内存。

四.程序调试

五.总结与体会

对于Qt来说我已经不陌生啦,经过上半年一学期的Qt界面编程,我已经可以独立完成一些不大复杂的程序。

对于这次课程设计其实程序十分简单,只是要嵌入opencv这个陌生的程序包,所以比较复杂。

之前都是运用自带的程序包,在Qt中嵌入其它程序包对我来说还是第一次,新手上路就会遇到问题,我在网上查了安装方法,但是有部分是错误的,导致后面编译能通过,却运行不了。

经过一步步的排查才发现是安装错啦,重新安装后才解决了问题。

还有一个问题,就是视频转换这部分,参考了资料才知道要将视频数据转换成QImage格式才可以显示在界面上,不然系统就会报错。

六.源程序清单

头文件cameraget.h

#ifndefCAMERAGET_H

#defineCAMERAGET_H

#include

#include

#include//设置采集数据的间隔时间

#include

#include//包含opencv库头文件

#include

namespaceUi{

classcameraGet;

}

classcameraGet:

publicQWidget

{

Q_OBJECT

public:

explicitcameraGet(QWidget*parent=0);

~cameraGet();

char*bgr24_bgr32(intwidth,intheight,char*src);

privateslots:

voidopenCamera();//打开摄像头

voidreadFrame();//读取当前帧信息

voidcloseCamera();//关闭摄像头。

private:

Ui:

:

cameraGet*ui;

boolinitCamera;

QTimer*timer;

CvCapture*cam;//视频获取结构,用来作为视频获取函数的一个参数

IplImage*frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像

};

#endif//CAMERAGET_H

source文件cameraget.cpp

#include"cameraget.h"

#include"ui_cameraget.h"

cameraGet:

:

cameraGet(QWidget*parent):

QWidget(parent),

ui(newUi:

:

cameraGet)

{

ui->setupUi(this);

cam=NULL;

timer=newQTimer(this);//初始化

initCamera=FALSE;

/*信号和槽*/

connect(timer,SIGNAL(timeout()),this,SLOT(readFrame()));//时间到,读取当前摄像头信息

connect(ui->open,SIGNAL(clicked()),this,SLOT(openCamera()));

connect(ui->closeCam,SIGNAL(clicked()),this,SLOT(closeCamera()));

connect(ui->btnExit,SIGNAL(clicked()),this,SLOT(close()));

}

/*打开摄像头*/

voidcameraGet:

:

openCamera()

{

if(!

initCamera)

{

QMessageBox:

:

about(this,"提示","即将打开摄像头");

cam=cvCreateCameraCapture(-1);//打开摄像头,从摄像头中获取视频

if(cam==NULL)

QMessageBox:

:

information(this,"警告","未连接摄像头!

");

else

initCamera=TRUE;

}

if(initCamera)

{

QMessageBox:

:

about(this,"提示","摄像头已经打开");

timer->start(25);//开始计时,超时则发出timeout()信号

}

}

/*读取摄像头信息*/

voidcameraGet:

:

readFrame()

{

char*image;

char*image32=0;

intsize;

frame=cvQueryFrame(cam);//从摄像头中抓取并返回每一帧

image=frame->imageData;

size=(frame->width)*(frame->height)*3;//获取帧视频像素大小

if(image)

{

image32=bgr24_bgr32(frame->width,frame->height,frame->imageData);

//将抓取到的帧,转换为QImage格式。

QImageimage((constuchar*)image32,frame->width,frame->height,QImage:

:

Format_RGB32);

ui->label->setPixmap(QPixmap:

:

fromImage(image));//将图片显示到label上

}

}

/*关闭摄像头,释放资源,必须释放*/

voidcameraGet:

:

closeCamera()

{

timer->stop();//停止读取数据。

cvReleaseCapture(&cam);//释放内存;

QMessageBoxmsgBox;

msgBox.setWindowTitle(tr("!

提示"));

msgBox.setText(tr("摄像头成功关闭!

"));

msgBox.exec();

}

char*cameraGet:

:

bgr24_bgr32(intwidth,intheight,char*src)

{

char*dst=0,*tmp;

dst=(char*)malloc(width*height*4);//申请缓冲区空间

tmp=dst;

for(inty=0;y

width*height*3的数据格式

{

for(intx=0;x

{

for(inti=0;i<3;i++)

{

*dst++=*src++;

}

*dst++=0;

}

}

return(tmp);

}

cameraGet:

:

~cameraGet()

{

deleteui;

}

主函数main.cpp

#include

#include

#include"cameraget.h"

intmain(intargc,char*argv[])

{

QApplicationa(argc,argv);

//设置字符编码为系统字符编码

QTextCodec*codec=QTextCodec:

:

codecForName("System");//获取系统编码

QTextCodec:

:

setCodecForLocale(codec);

QTextCodec:

:

setCodecForCStrings(codec);

QTextCodec:

:

setCodecForTr(codec);

cameraGetw;

w.show();

returna.exec();

}

 

计算机与通信学院课程设计评分表

课程名称:

嵌入式系统课程设计

项目

评价

设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

 

(注:

1.此页附在课程设计报告之后;2.综合成绩按优、良、中、及格和不及格五级评定。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1