车辆统计项目
效果图:
涉及到的内容
- 窗口的展示
- 图像/视频的加载
- 基本图像的绘制
- 车辆识别
- 基本图像运算与处理
- 形态学
- 轮廓查找
整体流程
- 加载视频
- 通过形态学识别车辆
- 对车辆进行统计
- 显示车辆统计信息
知识补充
背景减除
背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤。如果我们有完整的静止的背景帧,那么我们可以通过帧差法来计算像素差从而获取到前景对象。但是在大多数情况下,我们可能没有这样的图像,所以我们需要从我们拥有的任何图像中提取背景。当运动物体有阴影时,由于阴影也在移动,情况会变的变得更加复杂。为此引入了背景减除算法,通过这一方法我们能够从视频中分离出运动的物体前景,从而达到目标检测的目的。
- BackgroundSubtractorMOG
- 这是一个以混合高斯模型为基础的前景/背景分割算法。它是 P.KadewTraKuPong 和 R.Bowden 在 2001 年提出的。
- 它使用 K(K=3 或 5)个高斯分布混合对背景像素进行建模。使用这些颜色(在整个视频中)存在时间的长短作为混合的权重。背景的颜色一般持续的时间最长,而且更加静止。
- 在编写代码时,我们需要使用函数:cv2.createBackgroundSubtractorMOG() 创建一个背景对象。这个函数有些可选参数,比如要进行建模场景的时间长度,高斯混合成分的数量,阈值等。将他们全部设置为默认值。然后在整个视频中我们是需要使用backgroundsubtractor.apply() 就可以得到前景的掩模了.
- 移动的物体会被标记为白色,背景会被标记为黑色的
使用示例:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
bgs = cv2.bgsegm.createBackgroundSubtractorMOG()
while True:
ret, frame = cap.read()
if ret == True:
fgmask = bgs.apply(frame)
cv2.imshow('video', fgmask)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
项目完整代码
# 去背景
# 加载视频
import cv2
import numpy as np
cap = cv2.VideoCaptu