当前位置:   article > 正文

视频中的车流量统计_3.13

视频中的车流量统计_3.13

目标

  • 了解视频中处理车流量统计的方法

前面已经完成了视频中车辆的检测功能,下面我们对车辆进行跟踪,并将跟踪结果绘制在视频中。

主要分为以下步骤:

  • 对目标进行追踪
  • 绘制车辆计数结果
  • 将检测结果绘制在视频中并进行保存

1.对目标进行追踪

  1. # yolo中检测结果为0时,传入跟踪器中会出现错误,在这里判断下,未检测到目标时不进行目标追踪
  2. if np.size(dets) == 0:
  3. continue
  4. else:
  5. tracks = tracker.update(dets) # 将检测结果传入跟踪器中,返回当前画面中跟踪成功的目标,包含五个信息:目标框的左上角和右下角横纵坐标,目标的置信度
  6. # 对跟踪器返回的结果进行处理
  7. boxes = [] # 存放tracks中的前四个值:目标框的左上角横纵坐标和右下角的横纵坐标
  8. indexIDs = [] # 存放tracks中的最后一个值:置信度,用来作为memory中跟踪框的Key
  9. previous = memory.copy() # 用于存放上一帧的跟踪结果,用于碰撞检测
  10. memory = {} # 存放当前帧目标的跟踪结果,用于碰撞检测
  11. # 遍历跟踪结果,对参数进行更新
  12. for track in tracks:
  13. boxes.append([track[0], track[1], track[2], track[3]]) # 更新目标框坐标信息
  14. indexIDs.append(int(track[4])) # 更新置信度信息
  15. memory[indexIDs[-1]] = boxes[-1] # 将跟踪框以key为:置信度,value为:跟踪框坐标形式存入memory中

  1. 绘制车辆计数的相关信息

  1. cv2.line(frame, line[0], line[1], (0, 255, 0), 3) # 根据设置的基准线将其绘制在画面上
  2. cv2.putText(frame, str(counter), (30, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (255, 0, 0), 3) # 绘制车辆的总计数
  3. cv2.putText(frame, str(counter_up), (130, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (0, 255, 0), 3) # 绘制车辆正向行驶的计数
  4. cv2.putText(frame, str(counter_down), (230, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (0, 0, 255), 3) # 绘制车辆逆向行驶的计数

将结果保存在视频中

  1. # 未设置视频的编解码信息时,执行以下代码
  2. if writer is None:
  3. # 设置编码格式
  4. fourcc = cv2.VideoWriter_fourcc(*"mp4v")
  5. # 视频信息设置
  6. writer = cv2.VideoWriter("./output/output.mp4",
  7. fourcc,
  8. 30,
  9. (frame.shape[1], frame.shape[0]),
  10. True)
  11. # 将处理后的帧写入到视频中
  12. writer.write(frame)
  13. # 显示当前帧的结果
  14. cv2.imshow("", frame)
  15. # 按下q键退出
  16. if cv2.waitKey(1) & 0xFF == ord('q'):
  17. break

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/337625
推荐阅读
相关标签
  

闽ICP备14008679号