OpenCV_车辆检测实战
前言:总纲请看《计算机视觉学习路》
1.去除背景
createBackgroundSubtractorMOG2( ... )
history = 200 # 代表预存多少视频帧,根据这些帧里面静止的东西判断背景
可以看到树叶形成了很多噪点,所以需要在去除背景前先去噪,下面是去噪后的视频
2.形态处理
去除背景后通过腐蚀去掉小的噪点
腐蚀膨胀后发现有很多残缺的地方:
所以还要进行一次闭运算:如果加了闭运算还有物体内部还有斑块,可以再进行一次闭运算
3.查找轮廓
根据上面处理完的视频,可以找到一些(车和噪点的)轮廓 ,并且在原视频绘制出来,可以看到还是有一些其他的轮廓会显示出来
观察到车辆经过摄像头下方时,边框会变大,所以根据边框宽高,设置一个阈值,小于阈值的不显示。
获取到边框之后,用边框的中心点表示车辆,并且存入一个数组中,在视频底部画一条线,当车辆的中心点经过该线时,表示有车辆经过。
天空云动的时候轮廓也比较大,但是该轮廓一般静止,中心点不可能经过下面那条线!!!
4.车辆统计
查找到有效车辆后,需要将统计的个数显示在屏幕上,整体效果如下:
总结:传统目标检测的缺点:
- 当车辆靠的较近时,容易漏检
- 当车辆行驶较慢时,容易重复计数
更准确的统计信息需要使用深度学习,后面进行介绍。
总的代码如下:
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_车辆检测实战相关推荐
- AidLux智慧交通实战-车辆检测AI对抗攻防算法实现
完整项目代码:https://github.com/yangdadage/AidLux_intelligent_transportation/tree/master 课件及老师示例代码可关注AidLu ...
- 实现车辆检测+安全算法,玩转智慧交通AI应用!AidLux实战训练营第二期圆满收官
10月下旬,我们联合AI行业大V江大白举办了以智慧安防为主题的AI训练营. 在众多开发者的肯定与呼声之中,我们又在11月下旬开展了新一期的AI实战训练营! 并邀请了国内大厂AI图像资深算法工程师Roc ...
- PaddleX助力无人驾驶:基于YOLOv3的车辆检测和车道线分割实战
[飞桨开发者说]梁瑛平,北京理工大学徐特立学院本科二年级,人工智能开发爱好者. 项目简介 无人驾驶汽车利用传感器技术.信号处理技术.通讯技术和计算机技术等,通过集成视觉.激光雷达.超声传感器.微波雷达 ...
- opencv 车辆识别_人工智能实战项目:使用OpenCV和Python构建自己的车辆检测模型
总览 对智慧城市的想法感到兴奋吗?您会喜欢本教程的内容,以构建自己的车辆检测系统 在深入研究实现部分之前,我们将首先了解如何检测视频中的移动对象. 我们将使用OpenCV和Python来构建自动车辆检 ...
- 准确检测图像的轮廓 opencv_图像处理案例实战
1. 切边 源图像: 需求:扫描仪扫描到的法律文件,需要切边,去掉边缘空白,这样看上去才真实,人工操作成本与时间花费高,希望程序自动实现,高效.准确. 实现思路:边缘检测 + 轮廓发现或直线检测最大外 ...
- OpenVINO + OpenCV实现车辆检测与道路分割
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 模型介绍 OpenVINO支持道路分割 ...
- NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统
主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 随着智慧城市.自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 近日,在英伟达x量子位发起的 ...
- 算力限制场景下的目标检测实战浅谈
作者:张钊宁 本文为极市原创,转载请注明作者和出处. 原文:算力限制场景下的目标检测实战浅谈 本篇文章为张博19年1月18日在极市直播分享的文字详细整理. 算力限制场景主要是指在嵌入式设备,也就是算力 ...
- OpenCV实战【2】HOG+SVM实现行人检测
目录 HOG是什么? HOG vs SIFT HOG步骤 HOG在检测行人中的方式 Opencv实现 HOGDescriptor的构造函数: 行人检测HOG+SVM步骤 简化版的HOG计算 HOG是什 ...
最新文章
- 35岁中年博士失业,决定给后辈一些建议!
- TWebBrowser 与 MSHTML(2): 获取 window 对象的时机
- Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd
- puppet子命令介绍
- IOS开发之----异常处理
- 第二篇、通过蓝牙连接外设
- sharepoint 2016 开启Project 2016 pwa网站
- RANSAC算法注记
- 数据结构之二叉树:折纸问题——11
- c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
- Oracle优化查询技巧
- 《壹百度—百度十年千倍的29条法则》
- bzoj 1019: [SHOI2008]汉诺塔
- C#窗体应用显示用户sa登录失败
- 锁机制初探(五)Moniter的实现原理
- 扬州十日记 [明]王秀楚
- 轻松一下:python(turtle模块)绘制分形图
- RO,RW,ZI,FLASH,RAM前世今生
- CVPR 2022 | 涨点显著!AMD提出:动态Sparse R-CNN
- 如何解决收到网监大队信息系统安全等级保护限期整改通知书