Qt视频采集程序课程设计报告.docx
《Qt视频采集程序课程设计报告.docx》由会员分享,可在线阅读,更多相关《Qt视频采集程序课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。
![Qt视频采集程序课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/24/de920f5b-3cd6-4720-8460-351023231ae6/de920f5b-3cd6-4720-8460-351023231ae61.gif)
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;ywidth*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.综合成绩按优、良、中、及格和不及格五级评定。
)