《嵌入式课设报告w.docx》由会员分享,可在线阅读,更多相关《嵌入式课设报告w.docx(24页珍藏版)》请在优知文库上搜索。
1、HubeiAutomotiveIndustriseInstitute实训说明书课程名称嵌入式系统课程设计设计题目基于Qt的视频实时显示设计班号专业计算机科学与技术学号学生姓名指导教师(签字)起至日期组收年9月7日2015年9月30日一目的与要求31.1 课设目的31.2 任务概要313基本要求31.3 的内容32.1 设计原理32.1.1 video41inux简介42.1.2 Video41inux下视频编程的流程42.2 设计步骤4三总体方案设计43.1 系统功能描述43.2 开发工具及开发环境53.3 基本原理53.3.1 摄像功能53.3.2 图片处理5四功能实现64.1 摄像功能64
2、.1.1 类定义64.1.2 函数定义64.2 图片处理9五测试与调试125.1 整体性能测试125.2 各功能测试125.2.1 拍照135.2.2 图片处理功能14总结与体会15参考文献15-目的与要求通过本课程设计,提高学生的分析问题、解决问题的能力,巩固嵌入式系统的基本理论知识,进一步了解和掌握课程中所讲授的概念、方法。同时通过本课程设计,全面综合应用所学过的基础知识,建立一个完整的嵌入式系统的开发过程的概念,并掌握其中的主要原理和方法。1.1 课设目的本课程设计的目的是通过开发一个摄像头的驱动程序,使学生了解嵌入式产品开发的主要步骤,包括驱动程序的设计,从而培养学生独立完成比较复杂的
3、实际系统设计的能力。1.2 任务概要熟悉V41.2相关概念及编程方法;熟悉使用Qt与V41.2结合编程方法。使用QT与V41.2结合编程来开发一个摄像头的驱动实现视频实时显示功能,并实现相应的图形处理功能。1.3 基本要求(1)完成摄像头驱动,实现视频的实时显示功能;(2)截取视频中的一帧,并对其进行任意图像变换,可选择放大、缩小、扭曲、旋转、灰度化、二值化、均值滤波、中值滤波、频域变换和直方图分析等。二设计的内容2.1 设计原理2.1.1 VideO41inux简介Video41inux(简称V41.),是IinUX中关于视频设备的内核驱动,现在已有Video4linux2,还未加入IinU
4、X内核,使用需自己下载补丁。在1.inUX中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在dev/videoO下。2.1.2 VideO41inux下视频编程的流程 打开视频设备: 读取设备信息 更改设备当前设置(没必要的话可以不做) 进行视频采集,两种方法:(1)内存映射(2)直接从设备读取 对采集的视频进行处理 关闭视频设备。2. 2设计步骤(1)在实验箱上接入罗技C270摄像头。(2)将Camera.tar.gz解压至U/OPtzFriendIyARMexpqt下。(3)分析VideOdeViCe.叩P和VideOdeViCe.h学习使用C+封装V41.2驱动的方法。
5、分析PrOCeSSlmage.cpp中使用V41.2进行动态图像显示的方法。(5)进行任意图像变换,可选择拉伸、收缩、扭曲、旋转、灰度化、二值化、均值滤波、中值滤波、频域变换和直方图分析。三总体方案设计3.1系统功能描述本系统采用QT与V41.2结合编程方法,实现的主要功能有:(1)用外接的USB摄像设备来采取实时图像,并将其显示在开发板的1.ED屏幕上。(2)通过点击1.ED屏幕来完成拍照,截取一帧图片,并显示照片。(3)对照片或者默认图片进行处理,即放大、缩小、旋转、扭曲、灰度化等。3. 2开发工具及开发环境(1)计算机环境:XP系统,VM8.0,1.inux系统(虚拟机)。(2)试验箱环
6、境:DYV-I型嵌入式车载多媒体试验箱。(3)其他工具:串口线(连接PC机与试验箱),摄像头(USB接口)。(4)相关资料:摄像头驱动程序代码(Camera.targz)。3. 3基本原理1 .3.1摄像功能帧率:每秒从视频设备中读取的次数,可以自行调整。分辨率:图像像素分布的密集程度,本系统中的分辨率初始值设置为320*240。拍照:从保存视频的缓存区中取出一帧,并将其显示并保存文件格式。本系统中的图片格式为*JPG。3 .3.2图片处理(1)放大:将图片的宽和高同比放大任意倍数。将像素对应的灰度值放在原坐标系乘以放大系数得到的新坐标系中,从而实现图片的放大。图片的放大系数越大,得到的放大图
7、像越大,相应的新图像单位面积内的像素点就少,所以图像放大的越大,图像越模糊。(2)缩小:将图片的宽和高同比缩小任意倍数。将像素对应的灰度值放在原坐标系除以缩小系数得到的新坐标系中,从而实现图片的缩小。图片的缩小系数越大,得到的缩小图像越小,相应的新图像单位面积内的像素点就多,所以图像缩小的越小,图像越清楚。(3)旋转:将图片往规定方向旋转任意角度。图像的旋转过程中坐标系的变换:输出坐标系一数学坐标系一旋转一输出坐标系。(4)灰度化:图像上的像素都是有RGB3位整形数据组成的灰度值。RGB分别对应色光三原色中的红绿蓝,每种颜色的范围都是0255。如果图像的R、G、B都为0,则图像只有单一的黑色,
8、如果图像的R、G、B都是255,则图像只有单一的白色,如果图像中的每一个像素都有R=G=B,则图像就是灰色的,也就是我们要得到的灰度化图像。因此,图像的灰度化只要处理图像使其R=G=B即可。(5)二值图像是指每个像素不是黑就是白,其灰度值没有中间过渡的图像。二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。这时候要用更高的灰度级。(6)边缘:图像增强处理的一种。它是将遥感图像(或影像)相邻像元(或区域)的亮度值(或色调)相差较大的边缘(即影像色调突变或地物类型的边界线)处加以突出强调的技术方法。经边缘增强后的图像能更清
9、晰地显示出不同的物类型或现象的边界,或线形影像的行迹,以便于不同的物类型的识别及其分布范围的圈定。1.s-x:将图像横向放大(8)1.s-y将图像纵向放大(9)直方均衡化变换:设灰度变换s=f(r)为斜率有限的非减连续可微函数,它将输入图象Ii(x,y)转换为输出图象Io(x,y),输入图象的直方图为Hi(Ir),输出图象的直方图为Ho(三),则根据直方图的含义,经过灰度变换后对应的小面积元相等:Ho(三)ds=Hi(r)dr四功能实现4.1 摄像功能4.1.1classVideoDeviceipublicQObjectQjDBJECTpublic:VideoDevice(QStringdev
10、_name);初始化视频设备intOPen_device();打开设备intCIOSe_device();关闭设备intinit_device();载入设备的参数信息int3tart_capturing();开始捕获图像intStOP_capturing();停止捕获intUninit_device();/卸载设备intget_frame(void*,size*);/获取帧intUnge1.frame();停止获取private:intinitjnmap();将信息写入内存空间structbuffer/定义缓存空间(void*start;size_tlength;);QStringdev_na
11、me;intfd;buffer*buffers;unsignedintn_buffers;intindex;signals:voiddisplay_error(QString);4.1.2函数定义#include#include,processlmage.h,#include,videodevice.h11#includeui_processlmage.hextemCnIinclude#includeProcessimage:ProcessImage(QWidget*parent):QWidget(parent)加载驱动Pp(unsignedChar*)malloc(320240/*QWidg
12、et:width()*QWidget:height()*/*3*sizeof(char);painter=newQPainter(this);/捕捉视频画面frame=newQImage(pp,320,240,QImage:Format_RGB888)/frame=newQPixmap(320,320);connect(vd,SIGNA1.(display-error(QString),this,S1.OT(display_error(QString);/将信号与S1.OT连接rs=vd-open-device();if(-l=rs)tQMessageBox:warning(this,tr(,
13、error,),tr(11opendevdsperror),QMessageBox:Yes);vd-close_device();)rs=vd-init-device();if(-l=rs)(QMessageBox:warning(this,tr(error),tr(initfailed,1),QMessageBox:Yes);/显示提示错误信息框vd-close-device();rs=vd-start-capturing();if(-l=rs)(QMessageBox:waming(this,tr(error),tr(startcapturefailed),QMessageBox:Yes)
14、;vd-close-device();8if(-l=rs)QMessageBoxwaming(this,tr(,error,),tr(,getftamefailed),QMessageBox:Yes);vd-stop_capturing();timer=newQTimer(this);connect(timer,SIGNA1.(timeout(),this,S1.OT(update()window-show();Processimage:ProcessImageO/析构函数(rs=vd-stop_capturing();rs=vd-uninit_device();rs=vd-close_device();4.2 图片处理(1)拍照voidProcessimage:paizhao()beishu=1.0;seita=O;rs=vd-get_frame(void*)&p,&len);convertyuvtorgbbuffer(p,pp,320,240);/从视频的缓存区中提取一帧frame-loadFromData(uchar*)pp*len*320*240*3*sizeof(char);/将提取的帧提取为Qimage形式并放在指定的空间中frame-save(123.jpg);/保存所拍的照片img-load123.jpg);/将图片保存为*.jp