随着信息技术的飞速发展,利用日趋强大的信息化手段对交通系统进行管理也成为了一种发展趋势,上世纪八十年代开始,智能交通系统(Intelligent Trans-portaTIon System,简称 ITS)得到了快速的发展。面对现代化交通对信息需求的日益增长,ITS 不但可以在交通管理层面利用计算机强大的计算能力进行更加科学高效的交通规划和管理,并可以通过先进的自动化设备获得更丰富的交通信息。
本文实现了一个基于视频的交通检测系统,研究的范围包括视频帧的获取,图像处理,车辆的检测与跟踪,以及交通宏观信息的获取。详细探讨了车辆的检测与跟踪的技术方法,主要工作体现在如下几个方面:
(1) 采用 Directshow 技术对视频图像帧进行获取。
(2) 采用 OpenCV 库进行相关的图像处理并对感兴趣区域进行提取。
(3) 分析和探讨了基于连续图像帧之间的运动物体检测技术,比较和权衡了各种算法,在已经取得的研究成果的基础上,提出了基于检测线的车辆发现方法。
2 开发环境介绍视频处理一般是基于视频中一帧一帧的数据,所以首要的任务就是将视频中一帧一帧的图像获得到。在这个过程中我们采用了基于COM 组件技术的DirectShow 开发包。DirectShow 通过对过滤器的拼接来完成视频播放和处理任务,使得开发者不必关注视频的解码方式,从而将更多的精力放在图像处理的部分。
而在图像处理过程中,我们需要一套强大而高效的 API,使我们不需要关注最底层的图像处理过程,从而将精力都放在上层的算法的研究中。而在这里我们选择了 Intel 公司的 OpenCV 图像处理函数库,下面就针对 OpenCV 和 DirectShow 开发包进行介绍。
2.1 OpenCV 的介绍
OpenC++V 是 Intel 公司的一个开源的图像处理函数库。它包括 300 多个 C/C++函数的跨平台的中、高层API,它不依赖于其它的外部库。
OpenCV 包含了计算机视觉和图像处理方面的许多通用算法,它包括以下功能:对图像数据的 *** 作、对图像和视频的输入和输出、对矩阵和向量的 *** 作、具有线性代数的算法程序、对各种动态数据结构进行 *** 作、基本的数字图像处理能力、对各种结构进行分析、对摄像机定标、对运动进行分析、对目标进行识别,另外 OpenCV 还具有具有基本的 GUI 功能,还可对图像进行标注等。
在 OpenCV 库中,最常用也是最基本的一个数据结构是 Ip1Image,它在 OpenCV 中用来存储位图的数据结构,使用频率是非常高的,所以在这里有必要介绍一下它。Ip1Image 在 OpenCV 中的定义如程序1所示:
Typedef struct_Ip1Image{
int nSize; int ID; int nChannels; int depth; int dataOrder; int origin; int width; int height; struct _Ip1Image *maskROI;
struct _Ip1ROI *roi; void *imageId; struct_Ip1TIleInfo *TIleInfo;
int imageSize; char *imageData;
int widthStep; char *imageDataOrigin; }Ip1Image; (程序 1) Ip1Image 结构是来源于 Intel Image Precssiong
Libray,使用函数 cvCreateImage 来初始化 Ip1Image结构,函数的定义如程序 2 所示,这个函数只是单纯分配一块没有存放内容的内存。当为其中的参数 depth 赋值为 IPL_DEPTH_8U 时,初始化的是一个单通道无符号整形图像,而赋值为 IPL_DEPTH_32F 时,初始化的是一个三通道浮点图像。
Ip1Image*cvCreateImage(CvSize size, int depth, int channels); (程序 2)
有关OpenCV 实现其它功能的函数,文章中会贯穿的介绍。
2.2 DirectShow 的介绍
DirectShow 是微软在 AcTIve Movie 和 Video for Windows 的基础上,推出的新一代的基于 COM 组件
技术的流媒体处理的开发工具包。它为需要自定义解决方案的应用程序提供了对底层流控制结构的访问。从网络应用的角度看,DirectShow 可用于视频点播、视频会议和视频监控等领域。
当播放媒体文件时,Filter Graph Manager 首先建立一个 Filter Graph。在 Filter Graph 中,源过滤器负责读取原始的媒体数据流,变换过滤器完成对这些数据流的解码,最后由提交过滤器将解码的结果显示出来。此时的媒体数据已经转换为一帧一帧的图像,就可以方便的将它们一张张的捕捉下来了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)