前言:总纲请看《计算机视觉学习路》

1.去除背景

createBackgroundSubtractorMOG2( ... )

history = 200  # 代表预存多少视频帧,根据这些帧里面静止的东西判断背景

可以看到树叶形成了很多噪点,所以需要在去除背景前先去噪,下面是去噪后的视频

2.形态处理

去除背景后通过腐蚀去掉小的噪点

腐蚀膨胀后发现有很多残缺的地方:

所以还要进行一次闭运算:如果加了闭运算还有物体内部还有斑块,可以再进行一次闭运算

3.查找轮廓

根据上面处理完的视频,可以找到一些(车和噪点的)轮廓 ,并且在原视频绘制出来,可以看到还是有一些其他的轮廓会显示出来

观察到车辆经过摄像头下方时,边框会变大,所以根据边框宽高,设置一个阈值,小于阈值的不显示。

获取到边框之后,用边框的中心点表示车辆,并且存入一个数组中,在视频底部画一条线,当车辆的中心点经过该线时,表示有车辆经过。

天空云动的时候轮廓也比较大,但是该轮廓一般静止,中心点不可能经过下面那条线!!!

4.车辆统计

查找到有效车辆后,需要将统计的个数显示在屏幕上,整体效果如下:

总结:传统目标检测的缺点:

  1. 当车辆靠的较近时,容易漏检
  2. 当车辆行驶较慢时,容易重复计数

更准确的统计信息需要使用深度学习,后面进行介绍。

总的代码如下:

import cv2
import numpy as np# 加载视频
cap = cv2.VideoCapture('../img/video.mp4')# 背景去除
bgsubmog = cv2.createBackgroundSubtractorMOG2()# 创建腐蚀膨胀的卷积核
k = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# 设置最小宽高阈值
min_w, min_h = 90, 90
# 创建一个列表存放车辆轮廓中心点
cars = []
car_n = 0  # 车辆的个数
# 检测线的高   视频的尺寸为1280*720
line_height = 550
# 线的偏移
line_offset = 6# 定义函数,计算中心点
def center(x, y, w, h):x1 = int(w / 2)y1 = int(h / 2)cx = x + x1cy = y + y1return cx, cywhile True:ret, frame = cap.read()if ret:# 灰度化cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 由于一些树叶也会动,形成噪点,所以进行去噪blur = cv2.GaussianBlur(frame, (9, 9), 5)  # 9*9可以自己设置 3*3  5*5 7*7.。。mask = bgsubmog.apply(blur)  # 去除背景# 腐蚀erode = cv2.erode(mask, k)# 腐蚀之后变小了,要膨胀dilate = cv2.dilate(erode, k, iterations=2)# 闭操作,去掉物体内部的小块close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, k)close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, k)# 查找轮廓contours, h = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 每一帧都要画线cv2.line(frame, (0, line_height), (1280, line_height), (0, 255, 0), 2)for (i, c) in enumerate(contours):  # 拿到索引和边界(x, y, w, h) = cv2.boundingRect(c)  # 绘制矩形if w >= min_w and h >= min_h:  # 如果是车辆,绘制轮廓cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255))# 存取车的轮廓的中心点,如果中心点过线,代表有车经过cpoint = center(x, y, w, h)  # 计算中心点cars.append(cpoint)for (x, y) in cars:# 如果车在线的上下偏移量之间,表示有车辆经过if (y > line_height - line_offset) and (y < line_height + line_offset):car_n += 1  # 车的数量+1cars.remove((x, y))print(car_n)else:  # 如果不是车辆,跳过continue# 显示车辆的统计信息cv2.putText(frame, 'Cars Count:' + str(car_n), (500, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 5)cv2.imshow('video', frame)key = cv2.waitKey(33)if key == 113:  # 按‘q'退出breakcap.release()
cv2.destroyAllWindows()

OpenCV_车辆检测实战相关推荐

  1. AidLux智慧交通实战-车辆检测AI对抗攻防算法实现

    完整项目代码:https://github.com/yangdadage/AidLux_intelligent_transportation/tree/master 课件及老师示例代码可关注AidLu ...

  2. 实现车辆检测+安全算法,玩转智慧交通AI应用!AidLux实战训练营第二期圆满收官

    10月下旬,我们联合AI行业大V江大白举办了以智慧安防为主题的AI训练营. 在众多开发者的肯定与呼声之中,我们又在11月下旬开展了新一期的AI实战训练营! 并邀请了国内大厂AI图像资深算法工程师Roc ...

  3. PaddleX助力无人驾驶:基于YOLOv3的车辆检测和车道线分割实战

    [飞桨开发者说]梁瑛平,北京理工大学徐特立学院本科二年级,人工智能开发爱好者. 项目简介 无人驾驶汽车利用传感器技术.信号处理技术.通讯技术和计算机技术等,通过集成视觉.激光雷达.超声传感器.微波雷达 ...

  4. opencv 车辆识别_人工智能实战项目:使用OpenCV和Python构建自己的车辆检测模型

    总览 对智慧城市的想法感到兴奋吗?您会喜欢本教程的内容,以构建自己的车辆检测系统 在深入研究实现部分之前,我们将首先了解如何检测视频中的移动对象. 我们将使用OpenCV和Python来构建自动车辆检 ...

  5. 准确检测图像的轮廓 opencv_图像处理案例实战

    1. 切边 源图像: 需求:扫描仪扫描到的法律文件,需要切边,去掉边缘空白,这样看上去才真实,人工操作成本与时间花费高,希望程序自动实现,高效.准确. 实现思路:边缘检测 + 轮廓发现或直线检测最大外 ...

  6. OpenVINO + OpenCV实现车辆检测与道路分割

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 模型介绍 OpenVINO支持道路分割 ...

  7. NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统

    主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 随着智慧城市.自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 近日,在英伟达x量子位发起的 ...

  8. 算力限制场景下的目标检测实战浅谈

    作者:张钊宁 本文为极市原创,转载请注明作者和出处. 原文:算力限制场景下的目标检测实战浅谈 本篇文章为张博19年1月18日在极市直播分享的文字详细整理. 算力限制场景主要是指在嵌入式设备,也就是算力 ...

  9. OpenCV实战【2】HOG+SVM实现行人检测

    目录 HOG是什么? HOG vs SIFT HOG步骤 HOG在检测行人中的方式 Opencv实现 HOGDescriptor的构造函数: 行人检测HOG+SVM步骤 简化版的HOG计算 HOG是什 ...

最新文章

  1. 35岁中年博士失业,决定给后辈一些建议!
  2. TWebBrowser 与 MSHTML(2): 获取 window 对象的时机
  3. Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd
  4. puppet子命令介绍
  5. IOS开发之----异常处理
  6. 第二篇、通过蓝牙连接外设
  7. sharepoint 2016 开启Project 2016 pwa网站
  8. RANSAC算法注记
  9. 数据结构之二叉树:折纸问题——11
  10. c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
  11. Oracle优化查询技巧
  12. 《壹百度—百度十年千倍的29条法则》
  13. bzoj 1019: [SHOI2008]汉诺塔
  14. C#窗体应用显示用户sa登录失败
  15. 锁机制初探(五)Moniter的实现原理
  16. 扬州十日记 [明]王秀楚
  17. 轻松一下:python(turtle模块)绘制分形图
  18. RO,RW,ZI,FLASH,RAM前世今生
  19. CVPR 2022 | 涨点显著!AMD提出:动态Sparse R-CNN
  20. 如何解决收到网监大队信息系统安全等级保护限期整改通知书

热门文章

  1. maven私服资源的上传与下载
  2. Unity(12)-场景切换
  3. arduino 读取模拟电压_Arduino内置教程-基本原理-读取模拟电压
  4. html所属省份选择框_JS省份联级下拉框
  5. sql sa 账号被锁定的解决办法
  6. 万字长文:五年数据洞察中国餐饮大趋势
  7. 双屏显示器,扩展显示,笔记本清晰,扩展显示屏模糊的解决办法
  8. IP协议与IP地址那些事
  9. 大数据行业现在工作很难找吗?
  10. 温度传感器DS18B20介绍