视频是别克英朗2016款车上乘客通过后视镜拍摄的,通过视频
(1)估算该车和后方红色车辆之间的距离
(2)估算该车超越第一辆白色车辆时两车的速度差异
视频提取地址
链接:https://pan.baidu.com/s/1hPSxrhds6bwxyV4BoUR6Bw
提取码:v78s
分析:根据乘客拍摄的视频,不难发现视频中车辆所在的国道,以及国道道路上白色虚线的标准长为多少,经过查阅,白色的车道标识为6米。然后我们对视频进行分帧操作,我是用python实现的,一秒钟大约30帧左右,然后再根据拍摄者车辆倒视镜的下沿为一个标准线,看拍摄者车辆经过若干白色标识的帧数为多少,进而求取平均值就可以得到拍摄者车辆的速度~~为了更加的直观我把分帧的图像给大家展示一下,这两组也是实验中表格内的前两组实验图。
任务一(估算该车超越第一辆白色车辆时两车的速度差异)
下面的表格是我做此次实验的结果:
拍摄者车辆经过白色车道线的帧差表如下所示
经过多次实验发现,拍摄者的汽车经过白色标识车道线所用的视频帧平均为7帧,已知,每秒产生30帧图像,又经过查阅,白色的车道标识为6米,大约经过的时间为7/30秒,则该小汽车的速度为(假设该车为匀速运动):v=s/t,带入数据 得 v1 = 25.72m/s
为了精确地得到拍摄者车辆的真实速度,减少误差,已知路面上的白色标识为6米,白色标识之间为3米(3米和6米,百度可查,国家规定距离),这次我们选择“9米 = 白色路面标识 + 白色标识之间的3米” 作为测试距离,同理根据车辆经过不同的这段距离用时多少帧,在换算成秒来求真实速度~~为了更加的直观我把分帧的图像给大家展示一下,这两组也是实验中表格内的前两组实验图。
下面的表格是实验的结果:
拍摄者车辆经过 白色标识车道线+白色标识线间隔 的帧差表如下所示
从实验数据来看,拍摄者车辆经过 9米 距离的路段,用时平均为10帧左右,则可得拍摄者的车辆速度为: v=s/t,其中 s 等于9,时间 t 为 10/30 = 1/3 秒,带入数据得 v2 = 27m/s
综上,已知上次的实验结果为 v1 = 25.72m/s ,结合这次的 v2 = 27m/s,对两次的实验结果取平均,最终可得到拍摄者车辆的速度为 26.36m/s
有了计算拍摄者车辆速度的方法,我们采取同样的措施,根据分帧后的视频,我们根据每一帧的图像发现,在第101帧拍摄者的车辆经过白色汽车车尾,在124帧经过白色汽车车头,一共用时 23 帧。
由公式 V1T - V2T = S 即可得到 V2(V2是经过的白色小车的速度),经过查阅资料(车型根据视频就可以断定什么车,即可得车长为多少),经过的白色小轿车车长 4.45 米,V1 为拍摄者的车辆速度 26.36m/s,时间 T为 23/30秒,S = 4.45米,最后可得 V2=20.56m/s
则两个车的速度差为:26.36-20.56=5.8m/s
任务二(估算该车和后方红色车辆之间的距离)
由任务一可知拍摄者车辆的速度和经过的白色小车的速度,现在我们来估算拍摄者车辆与后方红色车辆之间的距离。同样根据分帧处理后的视频图像,分析可得:从白色汽车经过拍摄者车辆到与红色车辆大致平行位置,经过了200帧(120帧到340帧,如下图所示:
大约 200/30 = 20/3秒,由任务一得到的速度差 5.8m/s 可得,拍摄车辆和红色小车的距离大约为 42.54 米。
视频分帧代码:
import cv2
vidcap = cv2.VideoCapture("car_car.mp4")
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image)
if cv2.waitKey(10) == 27:
break
count += 1
(注:这里的时间换算单位:这是一个13秒的视频,对视频分帧后会得到连续的图像,一秒钟大概为30帧,所以这里的时间都除以 30 。任务二的估算误差比较大,全靠肉眼来分辨大概的位置。这是研究生数学建模比赛其中的一题,感兴趣的小伙伴可以去网上搜索其他的解法)