opencv案例: 车辆检测

这篇具有很好参考价值的文章主要介绍了opencv案例: 车辆检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

opencv案例: 车辆检测

说明:这是在哔哩哔哩上看李超老师的视频时,他讲的案例,我是搬运工。

  • 实现功能:
    1、识别出图片中的汽车对象
    2、对车辆进行统计,并将统计结果展示出来

  • 涉及到的知识点:
    图像和视频的加载、展示;
    基本图像绘制;
    基本图像运算与处理;
    形态学处理(比如降噪、腐蚀膨胀);
    轮廓查找。

  • 实现代码
    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture(r'C:\Users\25584\Desktop\video.mp4')   #加载视频文件, 第十九章知识点  
    bgsubmog = cv2.createBackgroundSubtractorMOG2()         #视频去背景,第二十一章知识点
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))     #设置形态学处理的kernel,5x5的矩形即可,第八章知识点
    
    min_w = 90    #大轮廓和小轮廓的分界点
    min_h = 90    #大轮廓和小轮廓的分界点
    cars = []     #汽车轮廓的中心点坐标
    line_height = 580   #红计数线位置
    offset = 7          #计数线上下的偏移量
    carnum = 0          #车辆计数
    
    #------------用while循环读取视频中的图像帧并处理------------
    while True:                  #如果读取成功就将捕获的视频帧显示在video窗口里,如果读取不成功就打印出warning,并退出循环
        ret, frame = cap.read()  #cap对象的.read()方法
        if ret:
            cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)     #转成灰度图像
            blur = cv2.GaussianBlur(frame, (3,3), 5,5)  #高斯平滑去噪,第七章知识点
            mask = bgsubmog.apply(blur)                 #去背景,背景去掉后,留下都是动的物体,比如汽车、刮风动的树、草等,下面是形态学处理去除树和草
            erode = cv2.erode(mask, kernel)             #腐蚀,去掉小的斑块,腐蚀后草就不见了,树有时还能看到
            dilate = cv2.dilate(erode, kernel, iterations=3)  #膨胀3次,还原放大,因为腐蚀后物体变小了,不利于我们计算。
            close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel, iterations=2)      #闭操作2次,去掉汽车内部的小块   A
            
            cnts, h = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)   #查找轮廓,就是找到每一个移动的汽车了
            
            for c in cnts:               #遍历这些轮廓
                (x,y, w,h) = cv2.boundingRect(c)    #给每个轮廓圈上矩形框,这样轮廓就变成xywh四个参数了
                
                isValid = (w>=min_w) and (h>=min_h)    #去除小轮廓,比如车灯的轮廓,我们不需要。判断如果矩形框的最小宽高小于90,就是小轮廓,就忽略continue
                if not isValid:
                    continue   #宽高小于90的就忽略,跳过,继续循环;如果大于90,就是有效的车辆,就把这个矩形框的中心点记下来
                    
                cv2.rectangle(frame, (x,y), (x+w, y+h), (0,0,255), 2)   #在原图上,把大轮廓用红色矩形框圈出来
                
                x1 = int(w/2)  #计算大轮廓的中心点,也就是矩形框的中心点,并把中心点都放到cars里面
                y1 = int(h/2)
                cx = x + x1
                cy = y + y1
                cpoint = (cx, cy)
                cars.append(cpoint)
    
            cv2.line(frame, (10,line_height), (1200, line_height), (255,255,0),2)   #画一条计数线,穿过计数线的车就计数
            
            for (x,y) in cars:    #看cars里面的中心点是否在计数线的附近,就是车经过了这个计数线我们就计数  
                if (y<(line_height+offset) and y>(line_height-offset)):
                    carnum +=1
            cars=[]
            cv2.putText(frame, 'Cars Count:'+str(carnum), (100, 70), cv2.FONT_HERSHEY_SIMPLEX, 2, (255,0,255), 5)  #第18章知识点,讲计数结果显示在视频上
            cv2.imshow('video', frame) 
            
        else:
            print('warning: video is not load correctly or the video is finished')
            break
            
        key = cv2.waitKey(1)   #每一帧图像就显示一毫秒就可以,然后继续循环
        if key == 27:          #27是esc的ascall码
            break
    cap.release()              #释放视频资源
    cv2.destroyAllWindows()    #释放窗口资源

    解释:A:膨胀3次后我们发现汽车中间还有一些小斑块,这些斑块也要去掉,因为这些小斑块影响后面对汽车画轮廓,有斑块轮廓就很乱,所以要把汽车内部的小斑块也去掉,就用闭操作去斑块。

    总结: 本案例的车辆检测方法是最传统的一种方法,如果车辆计数不准确了,要么是我们的计数线设置的位置不合适,位置太低,从下往上的车可能就检测不到;要么就是计数线上下的偏移量设置得不合适,过宽会出现重复计数,过窄容易漏计。所以这种方法的效果也是一般,最主要的原因还是我们在统计车辆的时候,无法对每个车辆做一个唯一的标识。由于视频是连续的,如果车辆行驶的过快,我们很可能捕捉不到,出现漏计;如果车辆行驶的很慢,我们就可能捕捉它两次甚至更多次,就出现重复计数。这是传统车辆检测方法的最重要的一个弊端。现在我们一般都采用深度学习算法去检测,我们通过训练数据建立一个模型,用模型判断每辆车并且判断从进入视野到出了视野同一辆车有唯一一个标识,也就是现实车辆的追踪的效果,这样就不会漏记和重复计数。

原视频是:video-CSDN直播

上面代码运行后的效果是:录制_2024_02_16_22_26_37_326-CSDN直播

如果你们可以自己下载原视频,运行代码就可以自行展示效果了,我这里是截屏就展示了一部分。文章来源地址https://www.toymoban.com/news/detail-835912.html

到了这里,关于opencv案例: 车辆检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv案例: 车辆检测

    opencv案例: 车辆检测 说明:这是在哔哩哔哩上看李超老师的视频时,他讲的案例,我是搬运工。 实现功能: 1、识别出图片中的汽车对象 2、对车辆进行统计,并将统计结果展示出来 涉及到的知识点: 图像和视频的加载、展示; 基本图像绘制; 基本图像运算与处理; 形态学

    2024年02月22日
    浏览(35)
  • 机器视觉系统在汽车车轮毂检测上的应用

    将机器视觉用于轮毂检测,可以利用图像分析的方法来测量轮毂特征尺寸、判断轮毂形状,并获取其位置坐标等信息,从而能够辨识流水生产线上的各种款式和型号的汽车轮毂。   市面上对汽车车轮毂具体检测要求如下 : 1.为了分辨流水线上不同类型的轮毂,大约有30种不同

    2024年01月21日
    浏览(46)
  • 现代雷达车载应用——第2章 汽车雷达系统原理 2.5节 检测基础

             经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。         对于要测试目标是否存在的雷达测量,可以假定下列两个假设之一为真:         •H0:—测量结果仅为噪声。         •H1:—测量是噪声和目标回波

    2024年02月04日
    浏览(47)
  • 基于图像识别的自动驾驶汽车障碍物检测与避障算法研究

    基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。 障碍物检测 障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数

    2024年02月08日
    浏览(46)
  • 新能源汽车电池包自动三维尺寸检测系统蓝光光学平面度测量仪-CASAIM

    电池包是新能源汽车核心能量源,为整车提供驱动电能。作为新能源汽车的核心部件,其品质直接决定了整车性能。 由于电池包的生产工艺相对复杂,传统的测量工具不仅测量工序复杂、精度不足,还会或多或少接触到电池表面形成瑕疵,因此高精度测量电池包提升质量品质

    2024年02月07日
    浏览(53)
  • 【OpenCV】车辆识别 目标检测 级联分类器 C++ 案例实现

    前言 一、目标检测技术 二、样本采集工作原理 三、创建自己的级联分类器 Step1:准备好样本图像 Step2:环境配置(OpenCV win10) Step3:设置路径 Step4:实现样本数据采集  Step5:实现样本数据训练 Step6:生成级联分类器文件  四、案例实现 Step1:灰度处理 Step2:二次压缩 Ste

    2024年02月05日
    浏览(40)
  • 应用于伺服电机控制、 编码器仿真、 电动助力转向、发电机、 汽车运动检测与控制的旋变数字转换器MS5905P

    MS5905P 是一款 12bit 分辨率的旋变数字转换器。 片上集成正弦波激励电路,正弦和余弦允许输入峰峰值 幅度为 2.3V 到 4.0V ,可编程激励频率为 10kHz 、 12kHz 、 15kHz 、 20kHz 。 转换器可并行或串行输出角度 和速度对应的数字量。 MS5905P 采用 LQFP44 封装 主要特点 ◼ 最大跟踪速率:

    2024年02月10日
    浏览(36)
  • 【OpenCV】 车辆识别 运动目标检测

    目录 一:车辆识别 运动目标检测 二:车辆识别实现 超详细步骤解析 步骤一:灰度化处理 步骤二:帧差处理 步骤三:二值化处理 步骤四:图像降噪 4-1 腐蚀处理 目的 去除白色噪点 4-2 膨胀处理 目的 把白色区域变大 步骤五:提取关键点 框选运动目标检测 三:车辆识别 完

    2024年02月04日
    浏览(50)
  • 基于OpenCV的车辆检测与记数

    本文提出一种简单有效的基于opencv的车辆检测与计数方法。 首先通过高速公路上的摄像头 获取到一段车流量视频 , 先预处理 :利用灰度线性变换,为了只关注视频中车辆移动的特征,不关注不同车辆的不同颜色的干扰特征; 然后对灰度视频去除背景 ,进一步抑制车辆外的

    2024年02月03日
    浏览(37)
  • 基于opencv深度学习,交通目标检测,行人车辆检测,人流统计,交通流量检测

    文章目录 0 前言+ 1. 目标检测概况+ 1.1 什么是目标检测?+ 1.2 发展阶段 2. 行人检测+ 2.1 行人检测简介+ 2.2 行人检测技术难点+ 2.3 行人检测实现效果+ 2.4 关键代码-训练过程 最后 设计项目案例演示地址: 链接 毕业设计代做一对一指导项目方向涵盖: 1.1 什么是目标检测? 目标检

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包