知识点收集:

背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤。如果我们有完整的静止的背景帧,那么我们可以通过帧差法来计算像素差从而获取到前景对象。但是在大多数情况下,我们可能没有这样的图像,所以我们需要从我们拥有的任何图像中提取背景。当运动物体有阴影时,由于阴影也在移动,情况会变的变得更加复杂。为此引入了背景减除算法,通过这一方法我们能够从视频中分离出运动的物体前景,从而达到目标检测的目的。

1.BackgroundSubtractorMOG()

  • 这是一个以混合高斯模型为基础的前景/背景分割算法。它是 P.KadewTraKuPong 和 R.Bowden 在 2001 年提出的。

  • 它使用 K(K=3 或 5)个高斯分布混合对背景像素进行建模。使用这些颜色(在整个视频中)存在时间的长短作为混合的权重。背景的颜色一般持续的时间最长,而且更加静止。

  • 在编写代码时,我们需要使用函数:cv2.createBackgroundSubtractorMOG() 创建一个背景对象。这个函数有些可选参数,比如要进行建模场景的时间长度,高斯混合成分的数量,阈值等。将他们全部设置为默认值。然后在整个视频中我们是需要使用backgroundsubtractor.apply() 就可以得到前景的掩模了.

  • 移动的物体会被标记为白色,背景会被标记为黑色的

2. cv2.VideoCapture()    # 导入视频, 返回一个bool值, 和画面(ret, frame)

3.cv2.bgsegm.createBackgroundSubtractorMOG()  # 检测动态目标

4.getStructuringElement()函数可用于构造一个特定大小和形状的结构元素,用于图像形态学处理

  • shape, ksize[, anchor]    # 内部命令

5.gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 灰度化处理

6.cv2.GaussianBlur(gray, (3, 3), 5)  # 高斯滤波, 去噪

import cv2
import numpy as npcap = cv2.VideoCapture('./video.mp4')  # 导入视频
basubmog = cv2.bgsegm.createBackgroundSubtractorMOG()
# 形态学
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
min_w = 90
min_h = 90
cars = []
# 检测线高
line_high = 620
# 线的偏移区间
offset = 7
carno = 0def center(x, y, w, h):x1 = int(w/2)y1 = int(h/2)cx = int(x) + x1cy = int(y) + y1return cx, cy
while True:ret, frame = cap.read()if ret == True:# 将原始帧进行灰度化, 然后去噪gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 去噪blur = cv2.GaussianBlur(gray, (3, 3), 5)# 获取前景掩码mask = bgsubmog.apply(blur)# 去掉一些干扰噪声erode = cv2.erode(mask, kernel)# 再把图像还原回来, 执行膨胀操作dilate = cv2.dilate(erode, kernel, iterations = 2)# 闭操作close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel, iterations = 2)# 查找轮廓result, contours, h = cv2.findContours(close, cv2.RETR+_TREE, cv2.CHAIN_APPROX_SIMPLE)# 画出检测线cv2.line(frame, (10, line_high), (1200, line_high), (255, 255, 0), 3)# 画出轮廓for (i, c) in enumerate(contours):(x, y, w, h) = cv2.boundingRect(c)is_valid = (w >= min_w) and (h >= min_h)if not is_valid:continue# 通过的才是有效的车, 有效部分才画矩形cv2.rectangle(frame, (int(x), int(y)), (int(x + w), int(y + h)), (0, 0, 225), 2)# 把车抽象为一个点,用于检测是否过线cpoint = center(x, y, w, h)cars.append(cpoint)# 画出中心点cvw.circle(frame, (cpoint), 5, (0, 0, 255), -1)# 判断汽车是否过线for (x, y) in cars:if y > (line_high - offset) and y < (line_high + offset):# 落入有效区间, 进行计数carno += 1cars.remove((x, y))print(carno)cv2.putText(frame, 'Vehicle Count' + str(carno), (500, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 5)cv2.imshow('frame', frame)key = cv2.waitKey(10)if key == 27:break
cap.release()
cv2.destroyAllWindows()

深度学习 06_2 车辆统计项目代码相关推荐

  1. 无人驾驶汽车系统入门(十二)——卷积神经网络入门,基于深度学习的车辆实时检测

    无人驾驶汽车系统入门(十二)--卷积神经网络入门,基于深度学习的车辆实时检测 上篇文章我们讲到能否尽可能利用上图像的二维特征来设计神经网络,以此来进一步提高识别的精度.在这篇博客中,我们学习一类专门用 ...

  2. 单元测试在深度学习中的应用 | 附代码「AI产品/工程落地」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |   Tilman Krokotsch 编译 |   ronghuaiyang   报道 |  AI公园 导读 本文非常详细的介绍并演示了如何将单元 ...

  3. 深度学习与模式识别之项目整理

    深度学习与模式识别之项目整理 3158861394@qq.com http://blog.csdn.net/luojun2007 作者:Luogz 声明: 本人一直从事图像处理,模式识别专业方向.该专 ...

  4. 深度学习入门系列6项目实战:声纳回声识别

    大家好,我技术人Howzit,这是深度学习入门系列第六篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列3: ...

  5. 深度学习-14:知名的深度学习开源架构和项目

    深度学习-14:知名的深度学习开源架构和项目 深度学习原理与实践(开源图书)-总目录 人工智能artificial intelligence,AI是科技研究中最热门的方向之一.像IBM.谷歌.微软.F ...

  6. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

  7. 使用PYTHON统计项目代码行数

    目录 一 使用PYTHON统计项目代码行数 二 应用实例 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 使用PYTHON统计项目代码行数 遇到一个非常小的需求:统计一个项目里头的各类源代码 ...

  8. IntelliJ IDEA统计项目代码行数

    第一步首先需要知道idea统计项目代码行数,主要是使用Statistic插件来统计,点击File->Settings,如下图所示: 第二步进去Settings界面之后,点击Plugins,然后点 ...

  9. 卫星影像领域的深度学习数据和模型项目

    深度学习和大数据学习需要依赖海量数据,遥感卫星也是深度学习的一个关键场景.后续我会支持更新我们在这个领域的进展,分享今天收集和整理的数据和项目,期待中国航天行业也能有更好的开放性. 地理空间和环境数据 ...

最新文章

  1. react 组件样式_如何使用样式化组件为React组件创建视觉变体
  2. 年龄测试计算器软件,抖音很火的年龄计算器
  3. where is path tag generated
  4. Acwing 309. 装饰围栏
  5. android java调用_关于Android中Java调用外部命令的三种方式
  6. 终于实现了 SpringBoot+WebSocket实时监控异常....
  7. marathon 测试
  8. P1215 [USACO1.4]母亲的牛奶 Mother's Milk
  9. BURP安装Turbo Intruder插件报错问题
  10. 蒙特卡洛模型——有约束的非线性规划问题
  11. 超级弱口令检查工具使用简介
  12. Simulink Solver
  13. 怎样提高睡眠质量容易入睡,五种应对失眠的妙招
  14. cgb2007-京淘day16
  15. 三、C++的常用STL
  16. 【Java面试】什么是字节码?采用字节码的好处是什么?
  17. 品牌对比|斯凯奇 VS 李宁
  18. Microsoft AjaxToolkits 17. UpdatePanelAnimation控件
  19. Java学习之一切都是对象(二)
  20. mysql read rnd next_mysql Handler_read_rnd_next value 值超大(10G+)的处理

热门文章

  1. 顶峰Android手机视频转换器,凡人Android手机视频转换器
  2. matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
  3. 奇妙的AE特效插件之红巨人粒子特效Trapcode Suite
  4. pythonrpg游戏_python实现的简单RPG游戏流程实例
  5. mysql 如果存在删除表_如果存在表则删除表然后创建Mysql(流程教程)
  6. 项目笔记(一):实验——用神经网络实现midi音乐旋律音轨的确定
  7. 20170420_趋势科技视频面试一面_后台开发
  8. 飞思卡尔微控制与MSCAN ----自学笔记
  9. (read/write、select、getsockopt、signal)实时判断socket连接状态/是否断开
  10. 痞子衡嵌入式:恩智浦SDK驱动代码风格、模板、检查工具