数字图像处理课程设计--车辆碰撞检测(C++实现)

课设题目

车辆碰撞检测:通过对路口的监控视频进行处理,当车辆发生碰撞时,识别出事故形式以及事故的责任方。

项目背景

        基于视频图像技术的交通事件自动检测系统是利用计算机视觉、模式识别等技术和方法进行交通参数采集,交通事件检测,特殊车辆识别和跟踪等。它能快速、准确的判定交通事件的发生,以及事件地点,可以大大减轻时间的危害程度,尽早排除事件对交通通行能力的影响。与传统方式相比,视频检测有着无法比拟的优越性,对解决我国道路交通安全问题有着重要的意义。 视频图像检测属于直接检测技术,即使在交通量很低的情况下也能有很好的可视化检测效果,是目前高速公路交通事件检测最具有效果的一种方式。 但是目前这种检测方法还普遍停留在人工检测方面,监控人员在监控室连续循环观察,仅仅是看到发生了交通事件,并不是通过交通事件自动检测了解交通事件发生,对于视频图像较多的路段监控,多度图像往往采用轮循或多画面的方式集中在一个显示器 上进行显示,需要监控人员对大量监视器显示内容进行长时间大容量的连续观察,这无疑加大了监控人员的工作量和强度,即使是这样,也有着很难保证多个画而连续检测,常常导致判断不准确,漏检现象严重存在。

算法流程图

数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)

图像处理

步骤
1.利用帧差法,提取前景图像
2.利用二值化函数,对前景图像进行二值化处理
3.腐蚀,膨胀,开闭运算,再膨胀突出车辆的特征。

函数说明

为了筛选出前景,获得车辆的基本特征,我们先选择高斯模糊对图像进行处理,为后续排除干扰做准备,再选择帧差法来筛选出运动中的物体。
数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)
vector<vector>:
vector容器里面放了一个vector容器,子容器里放点。
vector<V e c 4 i>:放了4维int向量,具体有什么用还不清楚,好像是规定了方向。
Findcontours函数对二值化图像中寻找轮廓,并且存放在contours容器中。
RETR_EXTERNAL为外部轮廓。
Drawcontours函数内 CV_FILLED参数对轮廓内的区域进行填充,我选择255,很好的填充空洞。
数字图像处理课程设计--车辆碰撞检测(C++实现)

图像处理效果

数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)

车辆识别

步骤
1.对已处理好的二值化图像进行寻找轮廓
2.对轮廓求最小面积矩形
3.利用angle函数以及面积对矩形进行判断,来筛选出车辆

处理出二值化图像后,就要对车辆进行提取。车辆的特征对于我来说不太好提取,但是对矩形框出来的车辆,他们的面积都很大,而且矩形的形状都很方很肥,对于行人自行车面积都很小很瘦,所以对矩形的面积和胖瘦可以判断出车辆还是行人。
旋转矩形介绍:自带长宽,角度,中心点

数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)

车辆碰撞判断

对于车辆碰撞,我有两个想法,一个是根据车辆前的角度,一个是碰撞后的矩形面积。
由于碰撞后两辆车会发生图像上的粘连,所以很难计算出两辆车的角度,只有在撞之前的一瞬间才可以记录,可是视频时一帧一帧识别的,所以很难记录这个角度。
所以我使用简单一点的面积判断,车辆在碰撞后,会出现图像上的粘连,所以矩形面积会变得很大,至少为原来面积的1.6倍。
数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)

红绿灯识别

步骤:
1.设置红绿灯的感兴趣区域roi
2.将roi转换为hsv图像
3.利用inrange函数,对红色的区域进行二值化
4.寻找轮廓,记录轮廓的数量
5.若轮廓数量等于1,就认为此时是红灯,使用旋转矩形将其框出来,利用旋转矩形的中心坐标,对其原图像的红灯所在位置进行红色通道灰度值的提取。如果大于200,就认为是红灯
6.若轮廓数量等于0,就认为是绿灯。

红绿灯识别部分程序
数字图像处理课程设计--车辆碰撞检测(C++实现)
数字图像处理课程设计--车辆碰撞检测(C++实现)
红绿灯效果
数字图像处理课程设计--车辆碰撞检测(C++实现)

完整项目源码、资料

有需要的小伙伴可以去海轰的微信公众号:海轰Pro
回复:海轰
就可以啦(主页有获取说明,注意查看哦╭(●`∀´●)╯)