OpenCV的视频图像处置Word文档格式.docx
《OpenCV的视频图像处置Word文档格式.docx》由会员分享,可在线阅读,更多相关《OpenCV的视频图像处置Word文档格式.docx(8页珍藏版)》请在冰点文库上搜索。
视频监控与显示系统的硬件和软件结构如图1所示。
硬件由三部份组成:
(1)摄像头。
负责搜集原始视频流数据;
(2)ARM开发板。
负责处置原始的视频流数据;
(3)LCD液晶显示器。
负责图像数据的显示。
软件部份也由三部份组成,这三部份运行在ARM-Liunx操作系统下:
(1)摄像头驱动程序;
(2)摄像头应用程序;
(3)LCD显示驱动程序。
1嵌入式系统应用程序开发方式
1.1硬件平台
嵌入式系统开发平台由主机PC机和目标机ARM板组成。
Pentium4的设计目标是适应更快的时钟速度,因为消费者开始依据更高的时钟购买运算机,是Intel生产的第7代x86微处置器,而且是继1995年出品的PentiumPro以后的第一款从头设计过的处置器,首款产品代码为:
WillAMEtte,拥有左右的内核时钟,并利用Socket423脚位架构,不同于PentiumII、PentiumIII和各类Celeron处置器,因为是全新设计的产品,因此与PentiumPro的关联很小。
值得注意的是,Pentium4有着超级快速到400MHz的前端总线,以后更有提升到533MHz、800MHz。
它实际上是一个为100MHz的四条并列总线,因此理论上它能够传送比一样总线多四倍的容量,因此号称有400MHz的速度。
因此主机PC要求CPU为Pentium4或以上,拥有一个25针的并口、一个9针的RS-232串口和一个20GB的硬盘。
ARM板是由深圳市武耀博德信息技术生产的270-S平台。
1.2软件开发平台
软件程序的开发是在PC机上完成的,PC机上的开发环境是。
Redhat提供了许多与程序开发有关的工具,还要在PC机的Linux操作系统下安装QT和OpenCV软件工具包。
(1)QT软件包。
包括库、库、库、uic工具、qmake工具、tmake工具和QTdesigner工具等。
(2)OpenCV软件包。
包括、、和等要紧的库。
在开发摄像头应用程序之前,要把u-boot、ARM-Linux操作系统和外部设备的驱动程序移植进入ARM目标板270-S中,如此主机PC上开发的各类应用程序软件才能在ARM目标板上运行。
2摄像头应用程序的构架与关键技术
2.1摄像头应用程序的结构
应用程序由两部份组成:
(1)在ARM-LinuxQT/Qtopia图形操作系统下的窗口界面设计(即人机界面的设计)。
(2)对视频流数据进行处置,并把处置完成的图像数据显示在QT/Qtopia图形界面下。
摄像头应用程序结构图与库函数的挪用关系如图2所示。
2.2摄像头应用程序的关键技术
本设计应用程序以OpenCV库和QT库为核心,负责处置视频数据与图像显示。
2.2.1OpenCV简介
OpenCV于1999年由Intel成立,此刻由WillowGarage提供支持。
OpenCV是一个基于BSD许可证授权(开源)发行的跨平台运算机视觉库,能够运行在Linux、Windows和MacOS操作系统上。
它轻量级而且高效——由一系列C函数和少量C++类组成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处置和运算机视觉方面的很多通用算法。
2.2.2嵌入式QT与Qtopia简介
QT是跨平台C++图形用户界面工具。
由于QT采纳面向对象开发,具有跨多平台、界面设计美观等特点,取得普遍应用。
因为KDE等项目利用QT作为支持库,因此有许多基于X-Windows的PC机上的应用程序能够超级方便地移植到QT上。
Qtopia是Trolltech公司为采纳嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包括完整的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序和开发框架。
拥有窗口操作系统,游戏和多媒体,工作辅助应用程序,同步框架,PIM应用程序,Internet应用程序,开发环境,输入法Java集成,本地化支持,个性化选项,无线支持等特点。
3QT窗体的设计方式
在QT编程中,有两种设计程序窗体(即人机界面)的方式。
第一种方式完全采纳面向对象的C++编程语言实现,开发者需要手工编写所有的代码;
另一种是采纳编写代码与QTDesigner设计工具相结合的方式。
QTDesigner工具会帮忙开发者完成大部份绘制窗体的工作。
本文摄像头应用程序的设计采纳第二种方式。
QTDesigner是QT系统专用的窗口界面开发工具,它不包括任何编译器,而仅仅提供一个可视化界面编辑器。
QTDesigner将编辑完成的窗体界面通过XML保留为。
ui文件,然后由专用的uic界面编译器将其转换为标准C++的源文件。
4视频图像处置与显示
视频图像处置与显示的进程如图3所示。
其进程要紧由四步组成
(1)初始化视频结构
CvCapture*capture=0;
capture=cvCaptureFromCAM(-1);
cvSetCaptureProperty
(capture,CV_CAP_PROP_frame_WIDTH,320);
(capture,CV_CAP_PROP_FRAME_HEIGHT,240);
在OpenCV应用程序中都要概念一个CvCapture类型的指针变量capture。
CvCapture类是视频获取结构,它没有公共接口,各类图像数据存储位置的头地址都能够赋值给指针变量capture。
在capture指针被赋值以后,能够作为其他图像处置函数的参数利用,完成各类图像处置功能。
OpenCV库顶用CvCapture*cvCaptureFromCAM(intindex)函数对摄像头分派视频图像数据流和初始化CvCapture结构。
函数参数index为摄像头索引值。
若是系统只有一个摄像头或利用哪个摄像头都无所谓,那么index的值为-1。
对视频数据结构capture设置参数。
用到的OpenCV的库函数为intcvSetCaptureProperty。
参数capture指定哪个视频获取结构需要设置参数;
property_id为属性标识符,由几个固定值组成,用来决定设置哪个参数。
(2)开启按时器后抓取图像帧
关键代码:
QTimerCameraTimer->
start(50,false);
intcvGrabFrame(capture);
IplImage*frame=cvRetrieveFrame(capture);
若是视频结构初始化成功,那么开启由QT库提供的QTimer按时器。
代码表示为:
CameraTimer->
start(50,false)。
参数“50”表示QT按时器每隔50ms触发一次。
该槽函数抓取一帧图像的方式为:
第一挪用OpenCV库函数intcvGrabFrame(CvCapture*capture);
从摄像头实时搜集的视频流中快速抓取一帧图像数据,而且把这帧图像数据存入ARM板的缓存中,这帧图像数据关于用户是不可见的。
采纳这种机制,是因为cvGrabFrame()能够把一帧图像数据以最快的速度存入缓存中[1]。
接下来,挪用OpenCV库函数cvRetrieveFrame()。
那个函数把方才通过cvGrabFrame()抓取的一帧图像数据从内部缓存从头读掏出来。
具体代码为:
IplImage*frame=cvRetrieveFrame(capture)。
事实上在挪用那个函数后,OpenCV内部会完成多步复杂的图像处置的工作。
(3)视频格式的转化
for(inty=0;
y<
height;
y++)
{
for(intx=0;
x<
width;
x++)
for(inti=0;
i<
3;
i++)
{*dst++=*frame->
imageData++;
}
*dst++=0;
}}
由于cvRetrieveFrame()从头读取到的一帧图像数据是IplImage类型,IplImage类型是24位真彩的三通道BGR(BGR24),而QT库内与图像处置与显示相关的函数只支持对1bit、8bit或32bit的位图进行处置。
因此为了使IplImage类型帧图像能够在QT/Qtopia图像界面中显示,又不降低视频图像质量,需要通进程序将24位(BRG24)帧图像转化为32位(BRG32)帧图像。
BGR32每一个像素点除拥有与BGR24相同的红绿蓝三种颜色,每种颜色8bit外,要还在这三种颜色共24bit的数据后面添加一组长度为8bit的0数据。
因此,图像格式转化的方式应该在原始的24位图像数据中每隔三个字节加入一个字节的0。
以下代码为BGR24->
BGR32图像中一个点的转化程序,其中frame->
imageData为原始图像的指针,dst为转化后图像的指针。
for(inti=0;
(4)将视频图像数据显示在QT/Qtopia图形界面
QImageimage=QImage((uchar*)image32,frame->
width,
frame->
height,32,NULL,0,QImage:
:
LittleEndian);
QPainterdisplay(picCamera);
(0,0,image);
第一挪用QImage构造函数把上一步转换好的32位(BGR32)图像数据初始化为QT图像数据格式;
然后挪用QT的低水平绘制类QPainter的构造函数对主窗口的显示器组建初始化;
初始化终止后将挪用QPainter类的drawImage成员函数,把通过QImage类转换过的图像数据image绘制在主窗体的显示器中,代码为(0,0,image)。
ARM平台的手持移动监控与显示终端设备已经普遍应用于社会的各个领域。
OpenCV图像处置库以其开源性、高效性、灵活性帮忙开发者大幅度地缩减开发周期。
ARM-LinuxQT/Qtopia与其他ARM端的图像界面操作系统相较较有免费、移植性好、内核精简、加倍稳固的特点。
本设计以OpenCV图像处置库为核心,在ARMLinuxQT/Qtopia图形界面操作系统下实现摄像头显示的应用程序,有超级好的有效性,能够普遍应用于各类ARM终端设备中。